Exemplo n.º 1
0
        public void SerializeCircularReferencesWithConverter()
        {
            CircularReferenceClass c1 = new CircularReferenceClass {
                Name = "c1"
            };
            CircularReferenceClass c2 = new CircularReferenceClass {
                Name = "c2"
            };
            CircularReferenceClass c3 = new CircularReferenceClass {
                Name = "c3"
            };

            c1.Child = c2;
            c2.Child = c3;
            c3.Child = c1;

            string json = JsonConvert.SerializeObject(c1, Formatting.Indented, new JsonSerializerSettings
            {
                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
                Converters = new List <JsonConverter> {
                    new CircularReferenceClassConverter()
                }
            });

            StringAssert.AreEqual(@"{
  ""$id"": ""1"",
  ""$type"": ""CircularReferenceClass"",
  ""Name"": ""c1"",
  ""Child"": {
    ""$id"": ""2"",
    ""$type"": ""CircularReferenceClass"",
    ""Name"": ""c2"",
    ""Child"": {
      ""$id"": ""3"",
      ""$type"": ""CircularReferenceClass"",
      ""Name"": ""c3"",
      ""Child"": {
        ""$ref"": ""1""
      }
    }
  }
}", json);
        }
Exemplo n.º 2
0
            public override object ReadJson(
                JsonReader reader,
                Type objectType,
                object existingValue,
                JsonSerializer serializer
                )
            {
                JObject o  = JObject.Load(reader);
                string  id = (string)o["$id"];

                if (id != null)
                {
                    CircularReferenceClass circularReferenceClass = new CircularReferenceClass();
                    serializer.Populate(o.CreateReader(), circularReferenceClass);
                    return(circularReferenceClass);
                }
                else
                {
                    string reference = (string)o["$ref"];
                    return(serializer.ReferenceResolver.ResolveReference(serializer, reference));
                }
            }
Exemplo n.º 3
0
        public void DeserializeCircularReferencesWithConverter()
        {
            string json =
                @"{
  ""$id"": ""1"",
  ""$type"": ""CircularReferenceClass"",
  ""Name"": ""c1"",
  ""Child"": {
    ""$id"": ""2"",
    ""$type"": ""CircularReferenceClass"",
    ""Name"": ""c2"",
    ""Child"": {
      ""$id"": ""3"",
      ""$type"": ""CircularReferenceClass"",
      ""Name"": ""c3"",
      ""Child"": {
        ""$ref"": ""1""
      }
    }
  }
}";

            CircularReferenceClass c1 = JsonConvert.DeserializeObject <CircularReferenceClass>(
                json,
                new JsonSerializerSettings
            {
                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
                Converters = new List <JsonConverter> {
                    new CircularReferenceClassConverter()
                }
            }
                );

            Assert.AreEqual("c1", c1.Name);
            Assert.AreEqual("c2", c1.Child.Name);
            Assert.AreEqual("c3", c1.Child.Child.Name);
            Assert.AreEqual("c1", c1.Child.Child.Child.Name);
        }