public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return(null); } var binaryDataStream = JcobConvert.GetBinaryDataStream(Thread.CurrentThread.ManagedThreadId); if (binaryDataStream != null) { JObject jsonObject = JObject.Load(reader); BinaryAddress binaryAddress = jsonObject.ToObject <BinaryAddress>(); if (binaryAddress.Type != null) { objectType = binaryAddress.Type; } var bytes = binaryDataStream.GetDataBytes(binaryAddress); using (MemoryStream memoryStream = new MemoryStream(bytes)) { return(DeserializeFunction(memoryStream, objectType, binaryAddress.Structure)); } } return(serializer.Deserialize(reader, objectType)); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value == null) { writer.WriteNull(); return; } var binaryDataStream = JcobConvert.GetBinaryDataStream(Thread.CurrentThread.ManagedThreadId); if (binaryDataStream != null) { var memoryStream = SerializeFunction(value, out var structure); BinaryAddress address = binaryDataStream.AddData(memoryStream, value.GetType(), structure); address.Type = _writeType ? value.GetType() : null; var jObject = JObject.FromObject(address, AddressSerializer); jObject.WriteTo(writer); return; } var converters = serializer.Converters.Where(x => !(x is JcobConverter)).ToArray(); var token = JToken.FromObject(value); token.WriteTo(writer, converters); }