-Added nullable DateTime support to IsoDateTimeConverter and JavaScriptDateTimeConverter

-Added WriteValue overloads to JsonWriter for nullable types
-Fixed JsonTextWriter.WriteValue(string) to write null instead of an empty string for a null value
-Fixed JsonWriter.WriteValue(object) to no longer error on null values
This commit is contained in:
JamesNK
2008-09-24 09:39:30 +00:00
parent 33c2d69b54
commit 500440e04f
13 changed files with 431 additions and 10 deletions
@@ -58,6 +58,32 @@ namespace Newtonsoft.Json.Tests.Converters
Assert.AreEqual("new Date(976918263055)", result);
}
[Test]
public void SerializeNullableDateTimeClass()
{
NullableDateTimeTestClass t = new NullableDateTimeTestClass()
{
DateTimeField = null,
DateTimeOffsetField = null
};
JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter();
string result;
result = JavaScriptConvert.SerializeObject(t, converter);
Assert.AreEqual(@"{""PreField"":null,""DateTimeField"":null,""DateTimeOffsetField"":null,""PostField"":null}", result);
t = new NullableDateTimeTestClass()
{
DateTimeField = new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Utc),
DateTimeOffsetField = new DateTimeOffset(2000, 12, 15, 22, 11, 3, 55, TimeSpan.Zero)
};
result = JavaScriptConvert.SerializeObject(t, converter);
Assert.AreEqual(@"{""PreField"":null,""DateTimeField"":new Date(976918263055),""DateTimeOffsetField"":new Date(976918263055),""PostField"":null}", result);
}
[Test]
public void DeserializeDateTime()
{
@@ -67,6 +93,14 @@ namespace Newtonsoft.Json.Tests.Converters
Assert.AreEqual(new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Utc), result);
}
[Test]
[ExpectedException(typeof(Exception), ExpectedMessage = "Cannot convert null value to System.DateTime.")]
public void DeserializeNullToNonNullable()
{
DateTimeTestClass c2 =
JavaScriptConvert.DeserializeObject<DateTimeTestClass>(@"{""PreField"":""Pre"",""DateTimeField"":null,""DateTimeOffsetField"":null,""PostField"":""Post""}", new JavaScriptDateTimeConverter());
}
[Test]
public void DeserializeDateTimeOffset()
{