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); }