【问题标题】:Correct way to serialize datatable序列化数据表的正确方法
【发布时间】:2014-10-31 20:19:25
【问题描述】:

以下代码在最后一行出现错误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); 行正常工作的正确方法是什么?

【问题讨论】:

  • 您传入的哪些数据可能导致错误?从第二行看json 是什么样的?
  • 我这里用第一个DataTable例子来测试dotnetperls.com/datatable

标签: c# json datatable json.net


【解决方案1】:

这是你从第二行得到的 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多