public void SerializeDictionarysWithPreserveObjectReferences() { PreserveReferencesHandlingTests.CircularDictionary circularDictionary = new PreserveReferencesHandlingTests.CircularDictionary(); circularDictionary.Add("other", new PreserveReferencesHandlingTests.CircularDictionary { { "blah", null } }); circularDictionary.Add("self", circularDictionary); InMemoryTraceWriter traceWriter = new InMemoryTraceWriter { LevelFilter = TraceLevel.Verbose }; JsonConvert.SerializeObject( circularDictionary, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All, TraceWriter = traceWriter }); Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference Id '1' for BESSy.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path ''.")); Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference Id '2' for BESSy.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'other'.")); Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference to Id '1' for BESSy.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'self'.")); }
public void SerializeDeserializeSpecialProperties() { PreserveReferencesHandlingTests.CircularDictionary circularDictionary = new PreserveReferencesHandlingTests.CircularDictionary(); circularDictionary.Add("other", new PreserveReferencesHandlingTests.CircularDictionary { { "blah", null } }); circularDictionary.Add("self", circularDictionary); string json = JsonConvert.SerializeObject(circularDictionary, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }); Assert.AreEqual(@"{ ""$id"": ""1"", ""other"": { ""$id"": ""2"", ""blah"": null }, ""self"": { ""$ref"": ""1"" } }", json); XmlNode node = DeserializeXmlNode(json, "root"); string xml = GetIndentedInnerXml(node); string expected = @"<?xml version=""1.0"" encoding=""utf-16""?> <root xmlns:json=""http://james.newtonking.com/projects/json"" json:id=""1""> <other json:id=""2""> <blah /> </other> <self json:ref=""1"" /> </root>"; Assert.AreEqual(expected, xml); string xmlJson = SerializeXmlNode(node); string expectedXmlJson = @"{ ""root"": { ""$id"": ""1"", ""other"": { ""$id"": ""2"", ""blah"": null }, ""self"": { ""$ref"": ""1"" } } }"; Assert.AreEqual(expectedXmlJson, xmlJson); }
public void SerializeDictionarysWithPreserveObjectReferences() { PreserveReferencesHandlingTests.CircularDictionary circularDictionary = new PreserveReferencesHandlingTests.CircularDictionary(); circularDictionary.Add("other", new PreserveReferencesHandlingTests.CircularDictionary { { "blah", null } }); circularDictionary.Add("self", circularDictionary); InMemoryTraceWriter traceWriter = new InMemoryTraceWriter { LevelFilter = TraceLevel.Verbose }; JsonConvert.SerializeObject( circularDictionary, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All, TraceWriter = traceWriter }); Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference Id '1' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path ''.")); Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference Id '2' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'other'.")); Assert.IsTrue(traceWriter.TraceRecords.Any(r => r.Message == "Writing object reference to Id '1' for Newtonsoft.Json.Tests.Serialization.PreserveReferencesHandlingTests+CircularDictionary. Path 'self'.")); }