From 33cf71dc74529457b3a3ace3eef07862a4658788 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Sat, 1 Apr 2017 12:44:17 +1300 Subject: [PATCH] -Fixed serializing IListSource implementations --- .../Serialization/JsonSerializerTest.cs | 36 +++++++++++++++++++ .../Serialization/JsonTypeReflector.cs | 5 +-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index cac1d087..f1221794 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs @@ -96,6 +96,42 @@ namespace Newtonsoft.Json.Tests.Serialization [TestFixture] public class JsonSerializerTest : TestFixtureBase { + public class ListSourceTest : IListSource + { + private string str; + + public string strprop + { + get { return str; } + set { str = value; } + } + + [JsonIgnore] + public bool ContainsListCollection + { + get { return false; } + } + + public IList GetList() + { + return new List(); + } + } + + [Test] + public void ListSourceSerialize() + { + ListSourceTest c = new ListSourceTest(); + c.strprop = "test"; + string json = JsonConvert.SerializeObject(c); + + Assert.AreEqual(@"{""strprop"":""test""}", json); + + ListSourceTest c2 = JsonConvert.DeserializeObject(json); + + Assert.AreEqual("test", c2.strprop); + } + public struct ImmutableStruct { public ImmutableStruct(string value) diff --git a/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs b/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs index 432ab7da..0eb77ea9 100644 --- a/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs +++ b/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs @@ -79,8 +79,9 @@ namespace Newtonsoft.Json.Serialization { Type converterType = typeConverter.GetType(); - if (converterType.FullName != "System.ComponentModel.ComponentConverter" - && converterType.FullName != "System.ComponentModel.ReferenceConverter" + if (!string.Equals(converterType.FullName, "System.ComponentModel.ComponentConverter", StringComparison.Ordinal) + && !string.Equals(converterType.FullName, "System.ComponentModel.ReferenceConverter", StringComparison.Ordinal) + && !string.Equals(converterType.FullName, "System.Windows.Forms.Design.DataSourceConverter", StringComparison.Ordinal) && converterType != typeof(TypeConverter)) { return typeConverter.CanConvertTo(typeof(string));