Пример #1
0
        public object Deserialize(SerializationContext context)
        {
            if (context.LocalValue.Type == JsonValueType.Object)
            {
                var jsonObj = context.LocalValue.Object;

                if (jsonObj.TryGetValue(Constants.RefKey, out var reference))
                {
                    var location = JsonPointer.Parse(reference.String);
                    context.SerializationMap.AddReference(location, context.CurrentLocation);
                    return(context.InferredType.Default());
                }
            }

            var pair = new SerializationReference
            {
                Source = context.CurrentLocation
            };

            context.SerializationMap.Add(pair);

            var obj = _innerSerializer.Deserialize(context);

            pair.Object = obj;
            pair.DeserializationIsComplete = true;

            return(obj);
        }
        public object?TryDeserialize(ISerializer serializer, DeserializationContext context)
        {
            if (context.LocalValue.Type == JsonValueType.Object)
            {
                var jsonObj = context.LocalValue.Object;
                if (jsonObj.TryGetValue(Constants.RefKey, out var reference))
                {
                    Log.Serialization(() => "Found reference marker; setting up tracking...");
                    var location = JsonPointer.Parse(reference.String);
                    context.SerializationMap.AddReference(location, context.CurrentLocation.CleanAndClone());
                    return(context.InferredType.Default());
                }
            }

            var pair = new SerializationReference(context.CurrentLocation.CleanAndClone());

            context.SerializationMap.Add(pair);

            var obj = serializer.Deserialize(context);

            pair.Object = obj;
            pair.DeserializationIsComplete = true;

            return(obj);
        }