使用JSON.NET的System.OutOfMemoryException

时间:2014-05-30 09:08:03

标签: json.net

尝试使用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

为什么?

谢谢

3 个答案:

答案 0 :(得分:1)

IMO这是一个错误,但如果你想反序列化DataSet或DataTable this might help you

答案 1 :(得分:1)

第二个示例中的JSON仅代表一行数据,而不是DataTableDataTableDataRows的有序集合,因此它需要在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还是任何自定义对象。