Skip to content

Commit

Permalink
Merge pull request #138 from Readify/issue-136
Browse files Browse the repository at this point in the history
Deserialization uses CustomJsonConverters first
  • Loading branch information
cskardon committed Dec 28, 2015
2 parents f179f57 + 4d268c5 commit dbdba82
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 4 deletions.
31 changes: 31 additions & 0 deletions Neo4jClient.Tests/Serialization/CustomJsonDeserializerTests.cs
Expand Up @@ -8,6 +8,7 @@
using Neo4jClient.ApiModels.Gremlin;
using Neo4jClient.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace Neo4jClient.Test.Serialization
{
Expand Down Expand Up @@ -208,6 +209,36 @@ public void ReadJsonCanMapNullableEnumsToEnum()
Assert.AreEqual(expected, result);
}

private class DateTimeDeserializer : DateTimeConverterBase
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value.GetType().IsAssignableFrom(typeof(DateTime)))
writer.WriteValue(((DateTime)value).Ticks);
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (objectType.IsAssignableFrom(typeof(DateTime)))
return new DateTime(long.Parse(reader.Value.ToString()));

return DateTime.MinValue;
}
}

[Test]
public void DeserializeShouldUseCustomSerializerBeforeDefault()
{
var deserializer = new CustomJsonDeserializer(new List<JsonConverter>(GraphClient.DefaultJsonConverters) { new DateTimeDeserializer() });
var expected = new DateTime(2000, 1, 1).Date;

var deserializeDateTime = deserializer.Deserialize<DateTimeModel>("{\"Foo\":\"630822816000000000\"}");

Assert.IsNotNull(deserializeDateTime.Foo);
Assert.AreEqual(expected, deserializeDateTime.Foo.Value);
}


[Test]
[TestCase("{\"Gender\": \"Female\"}", Gender.Female)]
[TestCase("{\"Gender\": \"1\"}", Gender.Female)]
Expand Down
8 changes: 4 additions & 4 deletions Neo4jClient/Serialization/CommonDeserializerMethods.cs
Expand Up @@ -84,6 +84,10 @@ public static object CoerceValue(DeserializationContext context, PropertyInfo pr
return null;

var propertyType = propertyInfo.PropertyType;
object jsonConversionResult;
if (TryJsonConverters(context, propertyType, value, out jsonConversionResult))
return jsonConversionResult;

Type genericTypeDef = null;

if (propertyType.IsGenericType)
Expand Down Expand Up @@ -165,10 +169,6 @@ public static object CoerceValue(DeserializationContext context, PropertyInfo pr
return Convert.FromBase64String(value.Value<string>());
}

object jsonConversionResult;
if (TryJsonConverters(context, propertyType, value, out jsonConversionResult))
return jsonConversionResult;

if (genericTypeDef == typeof(List<>))
{
var list = BuildList(context, propertyType, value.Children(), typeMappings, nestingLevel + 1);
Expand Down

0 comments on commit dbdba82

Please sign in to comment.