-
Notifications
You must be signed in to change notification settings - Fork 50
/
ObjectSerializer.cs
55 lines (50 loc) · 1.77 KB
/
ObjectSerializer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using LoveSeat;
namespace LoveSeat
{
public interface IObjectSerializer
{
T Deserialize<T>(string json) where T: class;
string Serialize<T>(T obj) where T : class;
Document<T> DeserializeToDoc<T>(string json) where T : class;
}
public class DefaultSerializer : IObjectSerializer
{
protected readonly JsonSerializerSettings settings;
public DefaultSerializer() {
settings = new JsonSerializerSettings();
var converters = new List<JsonConverter> { new IsoDateTimeConverter() };
settings.Converters = converters;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
settings.NullValueHandling = NullValueHandling.Ignore;
}
public bool DefaultValueIfFailedSerialization = true;
public Document<T> DeserializeToDoc<T>(string json) where T: class
{
return new Document<T>(json);
}
public T Deserialize<T>(string json) where T: class
{
if (!DefaultValueIfFailedSerialization)
return JsonConvert.DeserializeObject<T>(json, settings);
try
{
return JsonConvert.DeserializeObject<T>(json, settings);
}
catch (Exception ex)
{
//TODO: Build Logger Property and record exception
Console.WriteLine(ex);
}
return default(T);
}
public string Serialize<T>(T obj) where T: class
{
return JsonConvert.SerializeObject(obj, Formatting.Indented, settings);
}
}
}