diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs index a4bcae4c..e9f6a19a 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs @@ -2752,6 +2752,38 @@ namespace Newtonsoft.Json.Tests.Converters Console.WriteLine("DateTimeToXml_Local: " + dxml.Root.Element("CreatedDate").Value); } + [Test] + public void DateTimeToXml_Unspecified_Precision() + { + string json = @"{""CreatedDate"": ""2014-01-23T00:00:00.1234567""}"; + var dxml = JsonConvert.DeserializeXNode(json, "root"); + Assert.AreEqual("2014-01-23T00:00:00.1234567", dxml.Root.Element("CreatedDate").Value); + + Console.WriteLine("DateTimeToXml_Unspecified: " + dxml.Root.Element("CreatedDate").Value); + } + + [Test] + public void DateTimeToXml_Utc_Precision() + { + string json = @"{""CreatedDate"": ""2014-01-23T00:00:00.1234567Z""}"; + var dxml = JsonConvert.DeserializeXNode(json, "root"); + Assert.AreEqual("2014-01-23T00:00:00.1234567Z", dxml.Root.Element("CreatedDate").Value); + + Console.WriteLine("DateTimeToXml_Utc: " + dxml.Root.Element("CreatedDate").Value); + } + + [Test] + public void DateTimeToXml_Local_Precision() + { + DateTime dt = DateTime.Parse("2014-01-23T00:00:00.1234567+01:00"); + + string json = @"{""CreatedDate"": ""2014-01-23T00:00:00.1234567+01:00""}"; + var dxml = JsonConvert.DeserializeXNode(json, "root"); + Assert.AreEqual(dt.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFFFK", CultureInfo.InvariantCulture), dxml.Root.Element("CreatedDate").Value); + + Console.WriteLine("DateTimeToXml_Local: " + dxml.Root.Element("CreatedDate").Value); + } + [Test] public void SerializeEmptyNodeAndOmitRoot_XElement() { diff --git a/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs b/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs index 8b563b8e..29591731 100644 --- a/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs +++ b/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs @@ -79,11 +79,11 @@ namespace Newtonsoft.Json.Utilities switch (kind) { case DateTimeKind.Local: - return "yyyy-MM-ddTHH:mm:sszzzzzzz"; + return IsoDateFormat; case DateTimeKind.Unspecified: - return "s"; + return "yyyy-MM-ddTHH:mm:ss.FFFFFFF"; case DateTimeKind.Utc: - return "yyyy-MM-ddTHH:mm:ssZ"; + return "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"; default: throw new Exception("Unexpected DateTimeKind value."); }