diff --git a/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs index abea61f1..14f1ef1f 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/DataSetConverterTests.cs @@ -241,10 +241,12 @@ namespace Newtonsoft.Json.Tests.Converters return myTable; } - public class DataSetTestClass + public class DataSetAndTableTestClass { public string Before { get; set; } - public DataSet Data { get; set; } + public DataSet Set { get; set; } + public string Middle { get; set; } + public DataTable Table { get; set; } public string After { get; set; } } @@ -255,10 +257,12 @@ namespace Newtonsoft.Json.Tests.Converters ds.Tables.Add(CreateDataTable("FirstTable", 2)); ds.Tables.Add(CreateDataTable("SecondTable", 1)); - DataSetTestClass c = new DataSetTestClass + DataSetAndTableTestClass c = new DataSetAndTableTestClass { Before = "Before", - Data = ds, + Set = ds, + Middle = "Middle", + Table = CreateDataTable("LoneTable", 2), After = "After" }; @@ -266,7 +270,7 @@ namespace Newtonsoft.Json.Tests.Converters Assert.AreEqual(@"{ ""Before"": ""Before"", - ""Data"": { + ""Set"": { ""FirstTable"": [ { ""StringCol"": ""Item Name"", @@ -296,13 +300,34 @@ namespace Newtonsoft.Json.Tests.Converters } ] }, + ""Middle"": ""Middle"", + ""Table"": [ + { + ""StringCol"": ""Item Name"", + ""Int32Col"": 1, + ""BooleanCol"": true, + ""TimeSpanCol"": ""10.22:10:15.1000000"", + ""DateTimeCol"": ""2000-12-29T00:00:00Z"", + ""DecimalCol"": 64.0021 + }, + { + ""StringCol"": ""Item Name"", + ""Int32Col"": 2, + ""BooleanCol"": true, + ""TimeSpanCol"": ""10.22:10:15.1000000"", + ""DateTimeCol"": ""2000-12-29T00:00:00Z"", + ""DecimalCol"": 64.0021 + } + ], ""After"": ""After"" }", json); - DataSetTestClass c2 = JsonConvert.DeserializeObject(json, new IsoDateTimeConverter()); + DataSetAndTableTestClass c2 = JsonConvert.DeserializeObject(json, new IsoDateTimeConverter()); Assert.AreEqual(c.Before, c2.Before); - Assert.AreEqual(c.Data.Tables.Count, c2.Data.Tables.Count); + Assert.AreEqual(c.Set.Tables.Count, c2.Set.Tables.Count); + Assert.AreEqual(c.Middle, c2.Middle); + Assert.AreEqual(c.Table.Rows.Count, c2.Table.Rows.Count); Assert.AreEqual(c.After, c2.After); } } diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index 66445abb..38c85ba3 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs @@ -4124,5 +4124,35 @@ keyword such as type of business."" Assert.AreEqual("value!", c.Value); Assert.AreEqual(1, c.Age); } + + public class EnumerableClass + { + public IEnumerable Enumerable { get; set; } + } + + [Test] + public void DeserializeEnumerable() + { + EnumerableClass c = new EnumerableClass + { + Enumerable = new List { "One", "Two", "Three" } + }; + + string json = JsonConvert.SerializeObject(c, Formatting.Indented); + + Assert.AreEqual(@"{ + ""Enumerable"": [ + ""One"", + ""Two"", + ""Three"" + ] +}", json); + + EnumerableClass c2 = JsonConvert.DeserializeObject(json); + + Assert.AreEqual("One", c2.Enumerable.ElementAt(0)); + Assert.AreEqual("Two", c2.Enumerable.ElementAt(1)); + Assert.AreEqual("Three", c2.Enumerable.ElementAt(2)); + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Converters/DataSetConverter.cs b/Src/Newtonsoft.Json/Converters/DataSetConverter.cs index 8d7aebf3..b4fd9d5f 100644 --- a/Src/Newtonsoft.Json/Converters/DataSetConverter.cs +++ b/Src/Newtonsoft.Json/Converters/DataSetConverter.cs @@ -78,6 +78,8 @@ namespace Newtonsoft.Json.Converters { DataTable dt = (DataTable)converter.ReadJson(reader, typeof (DataTable), null, serializer); ds.Tables.Add(dt); + + reader.Read(); } return ds; diff --git a/Src/Newtonsoft.Json/Converters/DataTableConverter.cs b/Src/Newtonsoft.Json/Converters/DataTableConverter.cs index 55d98ef0..0eb61801 100644 --- a/Src/Newtonsoft.Json/Converters/DataTableConverter.cs +++ b/Src/Newtonsoft.Json/Converters/DataTableConverter.cs @@ -111,8 +111,6 @@ namespace Newtonsoft.Json.Converters reader.Read(); } - reader.Read(); - return dt; } diff --git a/Src/Newtonsoft.Json/JsonValidatingReader.cs b/Src/Newtonsoft.Json/JsonValidatingReader.cs index cb2435a0..795fb3f2 100644 --- a/Src/Newtonsoft.Json/JsonValidatingReader.cs +++ b/Src/Newtonsoft.Json/JsonValidatingReader.cs @@ -70,7 +70,7 @@ namespace Newtonsoft.Json _tokenType = tokenType; _schemas = schemas; - _requiredProperties = schemas.SelectMany(GetRequiredProperties).Distinct().ToDictionary(p => p, p => false); + _requiredProperties = schemas.SelectMany(GetRequiredProperties).Distinct().ToDictionary(p => p, p => false); } private IEnumerable GetRequiredProperties(JsonSchemaModel schema)