protected override object DeserializeObject(ArraySegment <byte> value)
{
using (var ms = new MemoryStream(value.Array, value.Offset, value.Count, writable: false))
using (var tr = new StreamReader(ms))
using (var jr = new Newtonsoft.Json.JsonTextReader(tr))
{
jr.Read();
if (jr.TokenType == JsonToken.StartArray)
{
// read type
var typeName = jr.ReadAsString();
var type = readCache.GetOrAdd(typeName, x => Type.GetType(x, throwOnError: true)); // Get type or Register type
// read object
jr.Read();
var deserializedValue = jsonSerializer.Deserialize(jr, type);
return(deserializedValue);
}
else
{
throw new InvalidDataException("JsonTranscoder only supports [\"TypeName\", object]");
}
}
}