-Changed DefaultDateTimeFormat on IsoDateTimeConverter to not display zero milliseconds

This commit is contained in:
JamesNK
2009-04-12 01:21:27 +00:00
parent 6042bf2207
commit 3e22e30261
6 changed files with 70 additions and 15 deletions
@@ -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<DateTime>(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<DateTimeOffset>(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;
@@ -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;
}
}
}
@@ -484,7 +484,7 @@ keyword such as type of business.""
}
[Test]
public void DateTime()
public void DateTimeTest()
{
List<DateTime> testDates = new List<DateTime> {
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<MemberConverterClass>(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<MemberConverterClass>(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<BrowserDateTimeTestClass>(browserJson);
Console.WriteLine(c.utc);
}
}
}
@@ -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]
@@ -60,8 +60,8 @@
<ItemGroup>
<Compile Include="Converters\BinaryConverterTests.cs" />
<Compile Include="Converters\StringEnumConverterTests.cs" />
<Compile Include="JTokenReaderTest.cs" />
<Compile Include="JTokenWriterTest.cs" />
<Compile Include="Linq\JTokenReaderTest.cs" />
<Compile Include="Linq\JTokenWriterTest.cs" />
<Compile Include="Serialization\CamelCaseMappingResolverTests.cs" />
<Compile Include="JsonValidatingReaderTests.cs" />
<Compile Include="Schema\ExtensionsTests.cs" />
@@ -12,7 +12,7 @@ namespace Newtonsoft.Json.Converters
/// </summary>
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;