-Fixed deserializing non-generic IReadOnlyCollection<T> implementations
This commit is contained in:
@@ -71,7 +71,9 @@ namespace Newtonsoft.Json.Tests
|
||||
jsonWriter.WriteEndObject();
|
||||
}
|
||||
|
||||
string json = Encoding.UTF8.GetString(ms.ToArray());
|
||||
byte[] data = ms.ToArray();
|
||||
|
||||
string json = Encoding.UTF8.GetString(data, 0, data.Length);
|
||||
|
||||
Assert.AreEqual(@"{" + '\n' + @" ""prop"": true" + '\n' + "}", json);
|
||||
}
|
||||
|
||||
@@ -75,4 +75,4 @@ using System.Security;
|
||||
// by using the '*' as shown below:
|
||||
|
||||
[assembly: AssemblyVersion("6.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("6.0.3.17309")]
|
||||
[assembly: AssemblyFileVersion("6.0.3.17312")]
|
||||
|
||||
@@ -1488,8 +1488,58 @@ namespace Newtonsoft.Json.Tests.Serialization
|
||||
Assert.AreEqual(2, products.Count);
|
||||
Assert.AreEqual("Product 1", products[0].Name);
|
||||
}
|
||||
|
||||
#if !(NET40 || NET35 || NET20 || PORTABLE40)
|
||||
[Test]
|
||||
public void ReadOnlyIntegerList()
|
||||
{
|
||||
ReadOnlyIntegerList l = new ReadOnlyIntegerList(new List<int>
|
||||
{
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
int.MaxValue
|
||||
});
|
||||
|
||||
string json = JsonConvert.SerializeObject(l, Formatting.Indented);
|
||||
|
||||
Assert.AreEqual(@"[
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
2147483647
|
||||
]", json);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !(NET40 || NET35 || NET20 || PORTABLE40)
|
||||
public class ReadOnlyIntegerList : IReadOnlyCollection<int>
|
||||
{
|
||||
private readonly List<int> _list;
|
||||
|
||||
public ReadOnlyIntegerList(List<int> l)
|
||||
{
|
||||
_list = l;
|
||||
}
|
||||
|
||||
public int Count
|
||||
{
|
||||
get { return _list.Count; }
|
||||
}
|
||||
|
||||
public IEnumerator<int> GetEnumerator()
|
||||
{
|
||||
return _list.GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
public class Array2D
|
||||
{
|
||||
public string Before { get; set; }
|
||||
|
||||
@@ -91,5 +91,5 @@ using System.Security;
|
||||
// by using the '*' as shown below:
|
||||
|
||||
[assembly: AssemblyVersion("6.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("6.0.3.17309")]
|
||||
[assembly: AssemblyFileVersion("6.0.3.17312")]
|
||||
[assembly: CLSCompliant(true)]
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace Newtonsoft.Json.Serialization
|
||||
#if !(NET40 || NET35 || NET20 || PORTABLE40)
|
||||
else if (ReflectionUtils.ImplementsGenericDefinition(underlyingType, typeof(IReadOnlyCollection<>), out tempCollectionType))
|
||||
{
|
||||
CollectionItemType = underlyingType.GetGenericArguments()[0];
|
||||
CollectionItemType = tempCollectionType.GetGenericArguments()[0];
|
||||
|
||||
if (ReflectionUtils.IsGenericDefinition(underlyingType, typeof(IReadOnlyCollection<>))
|
||||
|| ReflectionUtils.IsGenericDefinition(underlyingType, typeof(IReadOnlyList<>)))
|
||||
|
||||
Reference in New Issue
Block a user