Skip to content

Commit 63c180b

Browse files
author
Kevin Hellemun
committed
Added converter for anchor objects. (#43)
1 parent 1312147 commit 63c180b

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Reflection;
4+
using Bunq.Sdk.Model.Core;
5+
using Newtonsoft.Json;
6+
using Newtonsoft.Json.Linq;
7+
8+
namespace Bunq.Sdk.Json
9+
{
10+
public class AnchorObjectConverter: JsonConverter
11+
{
12+
private const string FORMAT_DATE = "yyyy-MM-dd HH:mm:ss.ffffff";
13+
14+
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
15+
{
16+
17+
new JsonSerializer().Serialize(writer, value);
18+
19+
}
20+
21+
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
22+
{
23+
var list = new List<Type> {typeof(IAnchorObjectInterface)};
24+
var jsonSerializer = JsonSerializer.CreateDefault(
25+
new JsonSerializerSettings
26+
{
27+
ContractResolver = new BunqContractResolver(list),
28+
DateFormatString = FORMAT_DATE,
29+
FloatParseHandling = FloatParseHandling.Decimal,
30+
Formatting = Formatting.Indented,
31+
NullValueHandling = NullValueHandling.Ignore,
32+
});
33+
34+
JToken token = JObject.Load(reader);
35+
var model = (IAnchorObjectInterface) jsonSerializer.Deserialize(token.CreateReader(), objectType);
36+
37+
if (!model.AreAllFieldNull()) return model;
38+
var fields = objectType.GetProperties();
39+
40+
foreach (var field in fields)
41+
{
42+
var fieldType = field.PropertyType;
43+
44+
if (!typeof(BunqModel).IsAssignableFrom(fieldType))
45+
{
46+
continue;
47+
}
48+
49+
var fieldContent = (BunqModel) jsonSerializer.Deserialize(token.CreateReader(), fieldType);
50+
51+
field.SetValue(model, fieldContent.AreAllFieldNull() ? null : fieldContent);
52+
}
53+
54+
return model;
55+
}
56+
57+
public override bool CanConvert(Type objectType)
58+
{
59+
throw new NotImplementedException();
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)