Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Safar <marek.safar@gmail.com>2016-10-14 00:58:18 +0300
committerMarek Safar <marek.safar@gmail.com>2016-10-14 10:10:17 +0300
commitd19e5c42a527800e92fd980a718c5b2afabb2a53 (patch)
tree5b21f4c027b65020f76ad141e3855e622744d1e3 /mcs/class/System.XML
parent398675d21a046cefeb8a36898bb4cdbd639d1601 (diff)
[System.Xml] Update supported time formats for mobile version of XML deserializer. Fixes #42843
Diffstat (limited to 'mcs/class/System.XML')
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs29
-rw-r--r--mcs/class/System.XML/Test/System.Xml.Serialization/DeserializeTests.cs7
-rw-r--r--mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs6
3 files changed, 41 insertions, 1 deletions
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
index a7343e01820..e27f99a0fb7 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
@@ -243,6 +243,33 @@ namespace System.Xml.Serialization {
}
}
+ static string[] allTimeFormats = new string[] {
+ "HH:mm:ss.fffffffzzzzzz",
+ "HH:mm:ss",
+ "HH:mm:ss.f",
+ "HH:mm:ss.ff",
+ "HH:mm:ss.fff",
+ "HH:mm:ss.ffff",
+ "HH:mm:ss.fffff",
+ "HH:mm:ss.ffffff",
+ "HH:mm:ss.fffffff",
+ "HH:mm:ssZ",
+ "HH:mm:ss.fZ",
+ "HH:mm:ss.ffZ",
+ "HH:mm:ss.fffZ",
+ "HH:mm:ss.ffffZ",
+ "HH:mm:ss.fffffZ",
+ "HH:mm:ss.ffffffZ",
+ "HH:mm:ss.fffffffZ",
+ "HH:mm:sszzzzzz",
+ "HH:mm:ss.fzzzzzz",
+ "HH:mm:ss.ffzzzzzz",
+ "HH:mm:ss.fffzzzzzz",
+ "HH:mm:ss.ffffzzzzzz",
+ "HH:mm:ss.fffffzzzzzz",
+ "HH:mm:ss.ffffffzzzzzz",
+ };
+
internal static object FromXmlString (TypeData type, string value)
{
if (value == null) return null;
@@ -254,7 +281,7 @@ namespace System.Xml.Serialization {
case "char": return (char)XmlConvert.ToInt32 (value);
case "dateTime": return XmlConvert.ToDateTime (value, XmlDateTimeSerializationMode.RoundtripKind);
case "date": return XmlConvert.ToDateTime (value).Date;
- case "time": return DateTime.ParseExact (value, "HH:mm:ss.FFFFFFF", null);
+ case "time": return DateTime.ParseExact(value, allTimeFormats, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite | DateTimeStyles.NoCurrentDateDefault | DateTimeStyles.RoundtripKind);
case "decimal": return XmlConvert.ToDecimal (value);
case "double": return XmlConvert.ToDouble (value);
case "short": return XmlConvert.ToInt16 (value);
diff --git a/mcs/class/System.XML/Test/System.Xml.Serialization/DeserializeTests.cs b/mcs/class/System.XML/Test/System.Xml.Serialization/DeserializeTests.cs
index ec13691da1c..1393c354207 100644
--- a/mcs/class/System.XML/Test/System.Xml.Serialization/DeserializeTests.cs
+++ b/mcs/class/System.XML/Test/System.Xml.Serialization/DeserializeTests.cs
@@ -1555,6 +1555,13 @@ namespace MonoTests.System.XmlSerialization
Assert.AreEqual (new DateTime (2012,2,5,9,0,0,DateTimeKind.Utc), o.SomeDate.ToUniversalTime ());
}
+ [Test]
+ public void TimeWithUtc ()
+ {
+ XmlSerializer xs = new XmlSerializer (typeof (UtcTimeClass));
+ var o = (UtcTimeClass) xs.Deserialize (new StringReader ("<UtcTimeClass xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><DateTimeValue>12:34:56.0Z</DateTimeValue></UtcTimeClass>"));
+ Assert.AreEqual (new DateTime (1,1,1,12,34,56,DateTimeKind.Utc), o.DateTimeValue);
+ }
public class Foo
{
diff --git a/mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs b/mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs
index 116bbe323ad..4adcc11b20d 100644
--- a/mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs
+++ b/mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs
@@ -1071,6 +1071,12 @@ namespace MonoTests.System.Xml.TestClasses
public DateTime SomeDate;
}
+ public class UtcTimeClass
+ {
+ [XmlElementAttribute (DataType = "time")]
+ public DateTime DateTimeValue;
+ }
+
public class Bug8468BaseClass
{
public string Base;