我有一个有效的 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"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
代码:
var table = JsonConvert.DeserializeObject<DataSet>(jsonText);
Run Code Online (Sandbox Code Playgroud)
错误:
读取 DataTable 时出现意外的 JSON 标记。预期的 StartArray,得到 StartObject。路径“根”,第 1 行,位置 9。
编辑1:
用户可以传递任何类型的 json,我需要将其转换为 DataSet 上面的示例“root”元素可以包含任何其他属性,如“child1”:“val1”、“child2”:“val2”等等。因此,输出数据集将包含 2 个表 namse root(应该有一行属性 1 和 2)和项目(应该有 2 行类型名称、计数、价格等)。
它不起作用,因为表示 的 JSON 对象DataSet不在 JSON 的根级别。在您的 JSON 中,它位于名为的属性内,该属性root位于另一个包装器对象内。因此,您在反序列化时需要考虑该外部对象。您可以定义一个包装类并将其反序列化为:
public class Wrapper
{
[JsonProperty("root")]
public DataSet DataSet { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后:
DataSet ds = JsonConvert.DeserializeObject<Wrapper>(json).DataSet;
Run Code Online (Sandbox Code Playgroud)
(小提琴)
或者,如果您不想创建一个类,您可以反序列化为 a JObject,向下导航到该root属性,然后DataSet从那里将其具体化为 a :
DataSet ds = JObject.Parse(json)["root"].ToObject<DataSet>();
Run Code Online (Sandbox Code Playgroud)
(小提琴)
您显示的 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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
代码:
var dataSet = JsonConvert.DeserializeObject<DataSet>(jsonText);
var table = dataSet.Tables[0];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25408 次 |
| 最近记录: |