尝试使用JSON.NET 6.0
DataSet ds = Newtonsoft.Json.JsonConvert.DeserializeObject<DataSet>
("{\"tab1\":[{\"col1\":\"val1\"}]}"); // OK
DataTable dt = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>
("{\"col1\":\"val1\"}"); // System.OutOfMemoryException
为什么?
谢谢
答案 0 :(得分:1)
IMO这是一个错误,但如果你想反序列化DataSet或DataTable this might help you。
答案 1 :(得分:1)
第二个示例中的JSON仅代表一行数据,而不是DataTable
。 DataTable
是DataRows
的有序集合,因此它需要在JSON中包含方括号。请尝试这样:
string json = "[{\"col1\":\"val1\"}]";
DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
我不确定你为什么得到OutOfMemoryException
;正如我所料,当我尝试时,我得到JsonSerializationException
。也许这是the most recent version of Json.Net中修复的错误。
答案 2 :(得分:0)
我通过创建JsonSerializer对象来解决这个问题。我的代码如下所示。
using (StreamReader r = new StreamReader(yourfilePath))
{
using (JsonReader reader = new JsonTextReader(r))
{
JsonSerializer serializer = new JsonSerializer();
T lstObjects = serializer.Deserialize<T>(reader);
}
}
此处 yourfilePath : - 是您的文件当前完整路径 T : - 是您的对象名称,无论是数据集,DataTable还是任何自定义对象。