读取数据表时出现意外的 JSON 令牌.预期的 StartArray,得到了 StartObject



我有一个有效的json(任何json字符串(字符串,并试图将其转换为数据集,但Newtonsoft.Json未能这样做。

Json 文本:

  {"root": {
  "Item": [
    {
      "Name": "Super Mario Bros",
      "Count": "14",
      "Price": "29,99",
      "Comment": "-No Comment-",
      "Artist": "N/A",
      "Publisher": "Nintendo",
      "Genre": "Video Games",
      "Year": "1985",
      "ProductID": "001"
    },
    {
      "Name": "The Legend of Zelda",
      "Count": "12",
      "Price": "34,99",
      "Comment": "-No Comment-",
      "Artist": "N/A",
      "Publisher": "Nintendo",
      "Genre": "Video Games",
      "Year": "1986",
      "ProductID": "002"
    }
  ]
}
}

法典:

var table = JsonConvert.DeserializeObject<DataSet>(jsonText);

错误:

读取数据表时出现意外的 JSON 令牌。预期的 StartArray,得到了 StartObject。路径"根",第 1 行,位置 9。

编辑 1:

用户可以传递任何类型的 json,我需要将其转换为数据集 对于上面的示例,"root"元素可以包含任何其他属性 如"child1":"val1"、"child2":"val2"等。所以,输出 数据集将包含 2 个表 namse 根(应有一行 属性 1 和 2(和项目(应有 2 行类型名称、计数、价格 等(。

它不起作用,因为表示DataSet的 JSON 对象不在 JSON 的根级别。 在您的 JSON 中,它位于一个名为 root 的属性内,该属性位于另一个包装器对象内。 因此,在反序列化时需要考虑该外部对象。 您可以定义一个包装类并反序列化为:

public class Wrapper
{
    [JsonProperty("root")]
    public DataSet DataSet { get; set; }
}

然后:

DataSet ds = JsonConvert.DeserializeObject<Wrapper>(json).DataSet;

(小提琴(

或者,如果您不想创建类,则可以反序列化为JObject,向下导航到 root 属性,然后从那里将其具体化为DataSet

DataSet ds = JObject.Parse(json)["root"].ToObject<DataSet>();

(小提琴(

您显示的 Json 无效。

它应该看起来像这样,加载到DataSet

{
  "Item": [
    {
      "Name": "Super Mario Bros",
      "Count": "14",
      "Price": "29,99",
      "Comment": "-No Comment-",
      "Artist": "N/A",
      "Publisher": "Nintendo",
      "Genre": "Video Games",
      "Year": "1985",
      "ProductID": "001"
    },
    {
      "Name": "The Legend of Zelda",
      "Count": "12",
      "Price": "34,99",
      "Comment": "-No Comment-",
      "Artist": "N/A",
      "Publisher": "Nintendo",
      "Genre": "Video Games",
      "Year": "1986",
      "ProductID": "002"
    }
  ]
}

法典:

var dataSet = JsonConvert.DeserializeObject<DataSet>(jsonText);
var table = dataSet.Tables[0];

只需在字符串化对象时添加[]

JSON.stringify([this.YourModel])

相关内容

  • 没有找到相关文章

最新更新