Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }