正确的序列化数据表的方法

时间:2014-10-31 20:19:25

标签: c# json datatable json.net

以下代码在最后一行Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path '', line 1, position 1.

上给出了错误
DataTable dt = GetTable();
string json = JsonConvert.SerializeObject(dt, Formatting.None);
var @object = JObject.Parse(json);

序列化数据表以使行var @object = JObject.Parse(json);正常工作的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

这是你从第二行获得的json:

[
  {
    "Dosage": 25,
    "Drug": "Indocin",
    "Patient": "David",
    "Date": "2014-10-31T16:25:33.181239"
  },
  {
    "Dosage": 50,
    "Drug": "Enebrel",
    "Patient": "Sam",
    "Date": "2014-10-31T16:25:33.181239"
  },
  .....

注意第一个字符[。这意味着它是一个数组,而不是一个对象。这是关键词。

所以,请使用:

DataTable dt = GetTable();
string json = JsonConvert.SerializeObject(dt, Formatting.None);
var @object = JArray.Parse(json); // <-- Using JArray, not JObject

如果要将json字符串转回数据表,可以使用以下行:

var dataTable2 = JsonConvert.DeserializeObject<DataTable>(json);