private static void AddContractStackCallbacks(JsonContract contract) { contract.OnDeserializingCallbacks.Add((o, ctx) => JsonLinkedContext.Get(ctx).PushObject(o)); contract.OnDeserializingCallbacks.Add((o, ctx) => JsonLinkedContext.Get(ctx).SetOwner(o)); contract.OnDeserializedCallbacks.Add((o, ctx) => JsonLinkedContext.Get(ctx).PopObject(o)); contract.OnSerializingCallbacks.Add((o, ctx) => JsonLinkedContext.Get(ctx).PushObject(o)); contract.OnSerializedCallbacks.Add((o, ctx) => JsonLinkedContext.Get(ctx).PopObject(o)); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var context = JsonLinkedContext.Get(serializer.Context); serializer.Serialize(writer, ((IDictionary <TKey, TValue>)value).ToDictionary( p => context.GetTypedLink(p.Key, serializer), p => context.GetTypedLink(p.Value, serializer) )); }
private void PopulateFromStream(T value, TextReader textReader) { JsonSerializer serializer = CreateJsonSerializer(); var context = JsonLinkedContext.Get(serializer.Context); using (var jsonReader = new JsonTextReader(textReader)) serializer.Populate(jsonReader, value); context.ValidateLinksResolved(); }
private T DeserializeFromStream(TextReader textReader) { JsonSerializer serializer = CreateJsonSerializer(); var context = JsonLinkedContext.Get(serializer.Context); T value; using (var jsonReader = new JsonTextReader(textReader)) value = serializer.Deserialize <T>(jsonReader); context.ValidateLinksResolved(); return(value); }
private void SerializeToStream(T value, TextWriter textWriter) { JsonSerializer serializer = CreateJsonSerializer(); var context = JsonLinkedContext.Get(serializer.Context); RememberLinks(value, context); using (var jsonWriter = new JsonTextWriterEx(textWriter)) { jsonWriter.Formatting = Formatting.Indented; jsonWriter.Indentation = 2; jsonWriter.QuoteNameHandling = QuoteNameHandling.Auto; SetWriterOptions(jsonWriter); serializer.Serialize(jsonWriter, value); //await streamWriter.FlushAsync().ConfigureAwait(false); jsonWriter.Flush(); // Flush is the only truly async method, so there's no point in async hassle } }
public override void WriteJson (JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteValue(JsonLinkedContext.Get(serializer.Context).GetTypedLink(value, serializer)); }