Call nullable WriteValue overloads in TraceJsonWriter (#1139)

Fixes #1138
This commit is contained in:
Jon Hanna
2017-01-07 20:25:46 +13:00
committed by James Newton-King
parent 260dfedac5
commit 218c25c859
2 changed files with 269 additions and 0 deletions
@@ -7311,6 +7311,36 @@ Path '', line 1, position 1.");
Assert.AreEqual(new Guid("d8220a4b-75b1-4b7a-8112-b7bdae956a45"), c.Id);
}
[Test]
public void SerializeNullableGuidCustomWriterOverridesNullableGuid()
{
NullableGuid ng = new NullableGuid {Id = Guid.Empty};
NullableGuidCountingJsonTextWriter writer = new NullableGuidCountingJsonTextWriter(new StreamWriter(Stream.Null));
JsonSerializer serializer = JsonSerializer.Create();
serializer.Serialize(writer, ng);
Assert.AreEqual(1, writer.NullableGuidCount);
MemoryTraceWriter traceWriter = new MemoryTraceWriter();
serializer.TraceWriter = traceWriter;
serializer.Serialize(writer, ng);
Assert.AreEqual(2, writer.NullableGuidCount);
}
private class NullableGuidCountingJsonTextWriter : JsonTextWriter
{
public NullableGuidCountingJsonTextWriter(TextWriter textWriter)
: base(textWriter)
{
}
public int NullableGuidCount { get; private set; }
public override void WriteValue(Guid? value)
{
base.WriteValue(value);
++NullableGuidCount;
}
}
[Test]
public void DeserializeGuid()
{
@@ -44,6 +44,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(decimal? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(bool value)
{
_textWriter.WriteValue(value);
@@ -51,6 +65,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(bool? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(byte value)
{
_textWriter.WriteValue(value);
@@ -58,6 +86,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(byte? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(char value)
{
_textWriter.WriteValue(value);
@@ -65,6 +107,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(char? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(byte[] value)
{
_textWriter.WriteValue(value);
@@ -86,6 +142,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(DateTime? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
#if !NET20
public override void WriteValue(DateTimeOffset value)
{
@@ -93,6 +163,21 @@ namespace Newtonsoft.Json.Serialization
_innerWriter.WriteValue(value);
base.WriteValue(value);
}
public override void WriteValue(DateTimeOffset? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
#endif
public override void WriteValue(double value)
@@ -102,6 +187,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(double? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteUndefined()
{
_textWriter.WriteUndefined();
@@ -123,6 +222,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(float? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(Guid value)
{
_textWriter.WriteValue(value);
@@ -130,6 +243,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(Guid? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(int value)
{
_textWriter.WriteValue(value);
@@ -137,6 +264,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(int? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(long value)
{
_textWriter.WriteValue(value);
@@ -144,6 +285,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(long? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(object value)
{
#if !(NET20 || NET35 || PORTABLE || PORTABLE40) || NETSTANDARD1_1
@@ -176,6 +331,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(sbyte? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(short value)
{
_textWriter.WriteValue(value);
@@ -183,6 +352,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(short? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(string value)
{
_textWriter.WriteValue(value);
@@ -197,6 +380,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(TimeSpan? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(uint value)
{
_textWriter.WriteValue(value);
@@ -204,6 +401,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(uint? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(ulong value)
{
_textWriter.WriteValue(value);
@@ -211,6 +422,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(ulong? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteValue(Uri value)
{
_textWriter.WriteValue(value);
@@ -232,6 +457,20 @@ namespace Newtonsoft.Json.Serialization
base.WriteValue(value);
}
public override void WriteValue(ushort? value)
{
_textWriter.WriteValue(value);
_innerWriter.WriteValue(value);
if (value.HasValue)
{
base.WriteValue(value.GetValueOrDefault());
}
else
{
base.WriteUndefined();
}
}
public override void WriteWhitespace(string ws)
{
_textWriter.WriteWhitespace(ws);