c# - 通过 JsonConvert 在 C# 中读取和解析 Json 文件
问题描述
我有 JSON 文件,如:
{
"50": {
"docid": "5611",
"code": "ГОСТ 11529-2016",
"name": "Материалы поливинилхлоридные для полов. Методы контроля",
"type_id": "6",
"status": "0"
},
"51": {
"docid": "509",
"code": "ГОСТ 11583-74",
"name": "Материалы полимерные строительные отделочные. Методы определения цветоустойчивости под воздействием света, равномерности окраски и светлоты",
"type_id": "6",
"status": "0"
},
...................................................................................
"4000": {
"docid": "5611",
"code": "ГОСТ 11529-2016",
"name": "Материалы поливинилхлоридные для полов. Методы контроля",
"type_id": "6",
"status": "0"
},
}
和代码:
private static void Main(string[] args)
{
using (var r = new StreamReader(@"C:\Users\Admin\Desktop\Json.json"))
{
var json = r.ReadToEnd();
var items = JsonConvert.DeserializeObject<List<UpL>>(json);
foreach(var item in items)
{
foreach (var i in item)
{
Console.WriteLine(i.name);
}
}
}
}
public class UpL
{
public Item item { get; set; }
}
public class Item
{
[JsonProperty("docid")] public string docid;
[JsonProperty("code")] public string code;
[JsonProperty("name")] public string name;
[JsonProperty("status")] public string status;
[JsonProperty("type_id")] public string type_id;
}
错误:类型对象不能在 foreach 语句中使用。
应该在代码中重写什么以避免此错误。如何正确解析这个 JSON?我需要从 Item 类中获取所有项目。
解决方案
我的第一条评论可能有点错误。
我觉得UpL
上课没必要。
您可以将 JSON 反序列Dictionary<string, Item>
化为List<T>
:
var dict = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
这也是我遇到这种 JSON 时犯的一个错误。
现在,如果您只想要这些项目,您可以在其上运行一些 LINQ 以仅选择这些项目:
var items = dict.Select(x => x.Value).ToList();
编辑
这是我的工作示例:
var json = @"{
""50"": {
""docid"": ""5611"",
""code"": ""ГОСТ 11529-2016"",
""name"": ""Материалы поливинилхлоридные для полов. Методы контроля"",
""type_id"": ""6"",
""status"": ""0""
},
""51"": {
""docid"": ""509"",
""code"": ""ГОСТ 11583-74"",
""name"": ""Материалы полимерные строительные отделочные. Методы определения цветоустойчивости под воздействием света, равномерности окраски и светлоты"",
""type_id"": ""6"",
""status"": ""0""
},
""4000"": {
""docid"": ""5611"",
""code"": ""ГОСТ 11529-2016"",
""name"": ""Материалы поливинилхлоридные для полов. Методы контроля"",
""type_id"": ""6"",
""status"": ""0""
}
}";
var dict = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
var items = dict.Select(x => x.Value).ToList();
推荐阅读
- python - 我在熊猫中有两个数据框。我需要从第二个获取输入,从第一个获取结果,然后在第二个打印
- adfs - 为什么我会收到此错误?
- python - 有没有办法在 Python 的 for 循环中创建多个相等的类对象?
- apache-spark - 在 EMR 上设置 jupyter 以使用 cql 从 cassandra 读取?
- amazon-web-services - 在 Spark Scala 中以编程方式在 EMR 集群级别设置 maximumResourceAllocation=true
- node.js - MongoDB 按三个字段中最新的对文档进行排序
- php - 如何清除blade.php中定义的部分
- c++ - 为什么数组类型的纯右值不能初始化相同类型的对象?
- amazon-web-services - S3 向 SQS 创建事件通知“无法验证以下目标配置”
- git - 如何最有效地编辑每个涉及特定文件的 git 提交?