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]);
        }