Пример #1
0
 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)
                                     ));
        }
Пример #3
0
        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();
        }
Пример #4
0
        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);
        }
Пример #5
0
        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
            }
        }
Пример #6
0
 public override void WriteJson (JsonWriter writer, object value, JsonSerializer serializer)
 {
     writer.WriteValue(JsonLinkedContext.Get(serializer.Context).GetTypedLink(value, serializer));
 }