From 3e22e302611e3b714d2dc1bf3533458f3875b24e Mon Sep 17 00:00:00 2001 From: JamesNK Date: Sun, 12 Apr 2009 01:21:27 +0000 Subject: [PATCH] -Changed DefaultDateTimeFormat on IsoDateTimeConverter to not display zero milliseconds --- .../Converters/IsoDateTimeConverterTests.cs | 12 +++--- Src/Newtonsoft.Json.Tests/JsonConvertTest.cs | 39 +++++++++++++++++++ .../JsonSerializerTest.cs | 22 +++++++++-- Src/Newtonsoft.Json.Tests/Linq/JTokenTests.cs | 6 +-- .../Newtonsoft.Json.Tests.Compact.csproj | 4 +- .../Converters/IsoDateTimeConverter.cs | 2 +- 6 files changed, 70 insertions(+), 15 deletions(-) diff --git a/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs index 26dde0a9..61869a05 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/IsoDateTimeConverterTests.cs @@ -66,13 +66,13 @@ namespace Newtonsoft.Json.Tests.Converters string result; result = JsonConvert.SerializeObject(d, converter); - Assert.AreEqual(@"""2000-12-15T22:11:03.0550000Z""", result); + Assert.AreEqual(@"""2000-12-15T22:11:03.055Z""", result); Assert.AreEqual(d, JsonConvert.DeserializeObject(result, converter)); d = new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Local); result = JsonConvert.SerializeObject(d, converter); - Assert.AreEqual(@"""2000-12-15T22:11:03.0550000" + d.GetLocalOffset() + @"""", result); + Assert.AreEqual(@"""2000-12-15T22:11:03.055" + d.GetLocalOffset() + @"""", result); } [Test] @@ -150,7 +150,7 @@ namespace Newtonsoft.Json.Tests.Converters string result; result = JsonConvert.SerializeObject(d, converter); - Assert.AreEqual(@"""2000-12-15T22:11:03.0550000+00:00""", result); + Assert.AreEqual(@"""2000-12-15T22:11:03.055+00:00""", result); Assert.AreEqual(d, JsonConvert.DeserializeObject(result, converter)); } @@ -164,7 +164,7 @@ namespace Newtonsoft.Json.Tests.Converters c.PreField = "Pre"; c.PostField = "Post"; string json = JsonConvert.SerializeObject(c, new IsoDateTimeConverter() { DateTimeStyles = DateTimeStyles.AssumeUniversal }); - Assert.AreEqual(@"{""PreField"":""Pre"",""DateTimeField"":""2008-12-12T12:12:12.0000000Z"",""DateTimeOffsetField"":""2008-12-12T12:12:12.0000000+00:00"",""PostField"":""Post""}", json); + Assert.AreEqual(@"{""PreField"":""Pre"",""DateTimeField"":""2008-12-12T12:12:12Z"",""DateTimeOffsetField"":""2008-12-12T12:12:12+00:00"",""PostField"":""Post""}", json); //test the other edge case too c.DateTimeField = new DateTime(2008, 1, 1, 1, 1, 1, 0, DateTimeKind.Utc).ToLocalTime(); @@ -172,7 +172,7 @@ namespace Newtonsoft.Json.Tests.Converters c.PreField = "Pre"; c.PostField = "Post"; json = JsonConvert.SerializeObject(c, new IsoDateTimeConverter() { DateTimeStyles = DateTimeStyles.AssumeUniversal }); - Assert.AreEqual(@"{""PreField"":""Pre"",""DateTimeField"":""2008-01-01T01:01:01.0000000Z"",""DateTimeOffsetField"":""2008-01-01T01:01:01.0000000+00:00"",""PostField"":""Post""}", json); + Assert.AreEqual(@"{""PreField"":""Pre"",""DateTimeField"":""2008-01-01T01:01:01Z"",""DateTimeOffsetField"":""2008-01-01T01:01:01+00:00"",""PostField"":""Post""}", json); } [Test] @@ -184,7 +184,7 @@ namespace Newtonsoft.Json.Tests.Converters c.PreField = "Pre"; c.PostField = "Post"; string json = JsonConvert.SerializeObject(c, new IsoDateTimeConverter() { DateTimeStyles = DateTimeStyles.AssumeUniversal }); - Assert.AreEqual(@"{""PreField"":""Pre"",""DateTimeField"":""2008-12-12T12:12:12.0000000Z"",""DateTimeOffsetField"":""2008-12-12T12:12:12.0000000+00:00"",""PostField"":""Post""}", json); + Assert.AreEqual(@"{""PreField"":""Pre"",""DateTimeField"":""2008-12-12T12:12:12Z"",""DateTimeOffsetField"":""2008-12-12T12:12:12+00:00"",""PostField"":""Post""}", json); //test the other edge case too c.DateTimeField = null; diff --git a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs index 2b4ef3b3..de8f985f 100644 --- a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs @@ -25,6 +25,8 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.Runtime.Serialization.Json; using System.Text; using Newtonsoft.Json.Utilities; using NUnit.Framework; @@ -291,5 +293,42 @@ now brown cow?", '"', true); Assert.AreEqual(JsonConvert.NegativeInfinity, JsonConvert.ToString(double.NegativeInfinity)); Assert.AreEqual(JsonConvert.NaN, JsonConvert.ToString(double.NaN)); } + + [Test] + public void DateTimeOffsetToString() + { + DateTimeOffset dt = new DateTimeOffset(2000, 12, 20, 0, 0, 0, TimeSpan.Zero); + dt = DateTimeOffset.Now; + Console.WriteLine(JsonConvert.ToString(dt)); + Console.WriteLine(JsonConvert.ToString(new DateTimeOffset(2000, 12, 20, 0, 0, 0, TimeSpan.FromHours(13)))); + Console.WriteLine(JsonConvert.ToString(DateTime.Now)); + Console.WriteLine(JsonConvert.ToString(DateTime.Now.ToUniversalTime())); + + MemoryStream ms = new MemoryStream(); + DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(DateTime)); + s.WriteObject(ms, DateTime.Now); + + string json = Encoding.UTF8.GetString(ms.ToArray()); + Console.WriteLine(AreEqual(DateTime.Now)); + Console.WriteLine(AreEqual(DateTime.UtcNow)); + Console.WriteLine(AreEqual(DateTimeOffset.Now)); + Console.WriteLine(AreEqual(DateTimeOffset.UtcNow)); + } + + private bool AreEqual(object value) + { + MemoryStream ms = new MemoryStream(); + DataContractJsonSerializer s = new DataContractJsonSerializer(value.GetType()); + s.WriteObject(ms, value); + + string dataContractJson = Encoding.UTF8.GetString(ms.ToArray()); + + string jsonNetJson = JsonConvert.SerializeObject(value); + + bool result = (dataContractJson == jsonNetJson); + Console.WriteLine(StringUtils.FormatWith("DataContract: {0}, Json.NET: {1}, Equal: {2}", CultureInfo.InvariantCulture, dataContractJson, jsonNetJson, result)); + + return result; + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs index e39a7745..860b43f4 100644 --- a/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs @@ -484,7 +484,7 @@ keyword such as type of business."" } [Test] - public void DateTime() + public void DateTimeTest() { List testDates = new List { new DateTime(100, 1, 1, 1, 1, 1, DateTimeKind.Local), @@ -848,7 +848,7 @@ keyword such as type of business."" MemberConverterClass m1 = new MemberConverterClass { DefaultConverter = testDate, MemberConverter = testDate }; string json = JsonConvert.SerializeObject(m1); - Assert.AreEqual(@"{""DefaultConverter"":""\/Date(0)\/"",""MemberConverter"":""1970-01-01T00:00:00.0000000Z""}", json); + Assert.AreEqual(@"{""DefaultConverter"":""\/Date(0)\/"",""MemberConverter"":""1970-01-01T00:00:00Z""}", json); MemberConverterClass m2 = JsonConvert.DeserializeObject(json); @@ -863,7 +863,7 @@ keyword such as type of business."" MemberConverterClass m1 = new MemberConverterClass { DefaultConverter = testDate, MemberConverter = testDate }; string json = JsonConvert.SerializeObject(m1, new JavaScriptDateTimeConverter()); - Assert.AreEqual(@"{""DefaultConverter"":new Date(0),""MemberConverter"":""1970-01-01T00:00:00.0000000Z""}", json); + Assert.AreEqual(@"{""DefaultConverter"":new Date(0),""MemberConverter"":""1970-01-01T00:00:00Z""}", json); MemberConverterClass m2 = JsonConvert.DeserializeObject(json, new JavaScriptDateTimeConverter()); @@ -1435,5 +1435,21 @@ keyword such as type of business."" string newJson = JsonConvert.SerializeObject(ii); Assert.AreEqual(@"{""SubProp"":""my subprop"",""SuperProp"":""overrided superprop""}", newJson); } + + public class BrowserDateTimeTestClass + { + public DateTime utc { get; set; } + public DateTime local { get; set; } + } + + public void BrowserNativeJsonDeserialization() + { + DateTime dt = DateTime.Now; + string browserJson = @"{""utc"":""2009-04-11T05:58:39Z"",""local"":""2009-04-11T05:58:39Z""}"; + + BrowserDateTimeTestClass c = JsonConvert.DeserializeObject(browserJson); + + Console.WriteLine(c.utc); + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json.Tests/Linq/JTokenTests.cs b/Src/Newtonsoft.Json.Tests/Linq/JTokenTests.cs index bf3c210a..fc57c825 100644 --- a/Src/Newtonsoft.Json.Tests/Linq/JTokenTests.cs +++ b/Src/Newtonsoft.Json.Tests/Linq/JTokenTests.cs @@ -509,12 +509,12 @@ namespace Newtonsoft.Json.Tests.Linq string json = a.ToString(Formatting.Indented, new IsoDateTimeConverter()); Assert.AreEqual(@"[ - ""2009-02-15T00:00:00.0000000Z"" + ""2009-02-15T00:00:00Z"" ]", json); json = JsonConvert.SerializeObject(a, new IsoDateTimeConverter()); - Assert.AreEqual(@"[""2009-02-15T00:00:00.0000000Z""]", json); + Assert.AreEqual(@"[""2009-02-15T00:00:00Z""]", json); } [Test] @@ -527,7 +527,7 @@ namespace Newtonsoft.Json.Tests.Linq string json = a.ToString(Formatting.None, new IsoDateTimeConverter()); - Assert.AreEqual(@"[""2009-02-15T00:00:00.0000000Z""]", json); + Assert.AreEqual(@"[""2009-02-15T00:00:00Z""]", json); } [Test] diff --git a/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj index 9895c5db..a18b96bb 100644 --- a/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj +++ b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj @@ -60,8 +60,8 @@ - - + + diff --git a/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs b/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs index cc9fc5ca..fa834a9c 100644 --- a/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs @@ -12,7 +12,7 @@ namespace Newtonsoft.Json.Converters /// public class IsoDateTimeConverter : JsonConverter { - private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK"; + private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK"; private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind; private string _dateTimeFormat;