}
}
+ 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;
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);
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
{