From a6ba601d7dbd185ac5c5e60b588e5b4d9100ca02 Mon Sep 17 00:00:00 2001 From: Ivan Hamilton Date: Thu, 20 Feb 2014 23:17:50 +1100 Subject: [PATCH] -Fixed reference loop checking (check reference, not equality) --- .../ReferenceLoopHandlingTests.cs | 33 +++++++++++++++++++ .../JsonSerializerInternalWriter.cs | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Src/Newtonsoft.Json.Tests/Serialization/ReferenceLoopHandlingTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/ReferenceLoopHandlingTests.cs index 324ae4002..0dc88c559 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/ReferenceLoopHandlingTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/ReferenceLoopHandlingTests.cs @@ -55,6 +55,23 @@ public void ReferenceLoopHandlingTest() Assert.AreEqual(ReferenceLoopHandling.Ignore, attribute.ReferenceLoopHandling); } + [Test] + public void HandleObjectReferenceLoopBadEquality() + { + ReferenceLoopHandlingObjectBadEquality o = new ReferenceLoopHandlingObjectBadEquality(); + o.Value = new ReferenceLoopHandlingObjectBadEquality(); + + string json = JsonConvert.SerializeObject(o, Formatting.Indented, new JsonSerializerSettings + { + ReferenceLoopHandling = ReferenceLoopHandling.Error + }); + Assert.AreEqual(@"{ + ""Value"": { + ""Value"": null + } +}", json); + } + [Test] public void IgnoreObjectReferenceLoop() { @@ -306,6 +323,22 @@ public class ReferenceLoopHandlingDictionary : Dictionary ReferenceEquals(o,value)) != -1) { string message = "Self referencing loop detected"; if (property != null)