-Fixed deserializing a DataTable property

This commit is contained in:
JamesNK
2011-01-28 07:53:57 +00:00
parent 868d6d3948
commit 05a4395a94
5 changed files with 65 additions and 10 deletions
@@ -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;
}
+1 -1
View File
@@ -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)