2 using System.Collections.Generic;
7 using System.Runtime.Serialization.Json;
9 namespace Hammock.Serialization
14 public class HammockDataContractJsonSerializer : Utf8Serializer, ISerializer, IDeserializer
16 private readonly Dictionary<RuntimeTypeHandle, DataContractJsonSerializer> _serializers =
17 new Dictionary<RuntimeTypeHandle, DataContractJsonSerializer>();
19 #region ISerializer Members
21 public virtual string Serialize(object instance, Type type)
24 using (var stream = new MemoryStream())
26 var serializer = CacheOrGetSerializerFor(type);
27 serializer.WriteObject(stream, instance);
29 var data = stream.ToArray();
30 result = ContentEncoding.GetString(data, 0, data.Length);
35 public virtual string ContentType
37 get { return "application/json"; }
42 #region IDeserializer Members
44 public virtual object Deserialize(RestResponseBase response, Type type)
47 using (var stream = new MemoryStream(ContentEncoding.GetBytes(response.Content)))
49 var serializer = CacheOrGetSerializerFor(type);
50 instance = serializer.ReadObject(stream);
55 public virtual T Deserialize<T>(RestResponseBase response)
57 var type = typeof (T);
59 using (var stream = new MemoryStream(ContentEncoding.GetBytes(response.Content)))
61 var serializer = CacheOrGetSerializerFor(type);
62 instance = (T) serializer.ReadObject(stream);
68 public dynamic DeserializeDynamic(RestResponseBase response)
70 throw new NotSupportedException();
76 private DataContractJsonSerializer CacheOrGetSerializerFor(Type type)
78 var handle = type.TypeHandle;
79 if (_serializers.ContainsKey(handle))
81 return _serializers[handle];
84 var serializer = new DataContractJsonSerializer(type);
85 _serializers.Add(handle, serializer);