public void PreserveReferencesHandlingWithReusedJsonSerializer() { MyClass c = new MyClass(); IList <MyClass> myClasses1 = new List <MyClass> { c, c }; var ser = new JsonSerializer() { PreserveReferencesHandling = PreserveReferencesHandling.All }; MemoryStream ms = new MemoryStream(); using (var sw = new StreamWriter(ms)) using (var writer = new JsonTextWriter(sw) { Formatting = Formatting.Indented }) { ser.Serialize(writer, myClasses1); } byte[] data = ms.ToArray(); string json = Encoding.UTF8.GetString(data, 0, data.Length); StringAssert.AreEqual(@"{ ""$id"": ""1"", ""$values"": [ { ""$id"": ""2"", ""PreProperty"": 0, ""PostProperty"": 0 }, { ""$ref"": ""2"" } ] }", json); ms = new MemoryStream(data); IList <MyClass> myClasses2; using (var sr = new StreamReader(ms)) using (var reader = new JsonTextReader(sr)) { myClasses2 = ser.Deserialize <IList <MyClass> >(reader); } Assert.AreEqual(2, myClasses2.Count); Assert.AreEqual(myClasses2[0], myClasses2[1]); Assert.AreNotEqual(myClasses1[0], myClasses2[0]); }