-Fixed deserializing a DataTable property
This commit is contained in:
@@ -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<DataSetTestClass>(json, new IsoDateTimeConverter());
|
||||
DataSetAndTableTestClass c2 = JsonConvert.DeserializeObject<DataSetAndTableTestClass>(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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<string> Enumerable { get; set; }
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DeserializeEnumerable()
|
||||
{
|
||||
EnumerableClass c = new EnumerableClass
|
||||
{
|
||||
Enumerable = new List<string> { "One", "Two", "Three" }
|
||||
};
|
||||
|
||||
string json = JsonConvert.SerializeObject(c, Formatting.Indented);
|
||||
|
||||
Assert.AreEqual(@"{
|
||||
""Enumerable"": [
|
||||
""One"",
|
||||
""Two"",
|
||||
""Three""
|
||||
]
|
||||
}", json);
|
||||
|
||||
EnumerableClass c2 = JsonConvert.DeserializeObject<EnumerableClass>(json);
|
||||
|
||||
Assert.AreEqual("One", c2.Enumerable.ElementAt(0));
|
||||
Assert.AreEqual("Two", c2.Enumerable.ElementAt(1));
|
||||
Assert.AreEqual("Three", c2.Enumerable.ElementAt(2));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -111,8 +111,6 @@ namespace Newtonsoft.Json.Converters
|
||||
reader.Read();
|
||||
}
|
||||
|
||||
reader.Read();
|
||||
|
||||
return dt;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ namespace Newtonsoft.Json
|
||||
_tokenType = tokenType;
|
||||
_schemas = schemas;
|
||||
|
||||
_requiredProperties = schemas.SelectMany(GetRequiredProperties).Distinct().ToDictionary(p => p, p => false);
|
||||
_requiredProperties = schemas.SelectMany<JsonSchemaModel, string>(GetRequiredProperties).Distinct().ToDictionary(p => p, p => false);
|
||||
}
|
||||
|
||||
private IEnumerable<string> GetRequiredProperties(JsonSchemaModel schema)
|
||||
|
||||
Reference in New Issue
Block a user