通过JsonConvert读取并解析C#中的Json文件

通过JsonConvert读取并解析C#中的Json文件,c#,json,parsing,json.net,C#,Json,Parsing,Json.net,我有JSON文件,比如: { "50": { "docid": "5611", "code": "ГОСТ 11529-2016", "name": "Материалы поливинилхлоридные для полов. Методы контроля", "type_id": "6", "status": "0"

我有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;
        }
和代码:

        {
          "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;
        }
private static void Main(字符串[]args)
{
使用(var r=newstreamreader(@“C:\Users\Admin\Desktop\Json.Json”))
{
var json=r.ReadToEnd();

var items=JsonConvert.DeserializeObject(json); foreach(项目中的var项目) { foreach(项目中的var i) { 控制台写入线(即名称); } } } } 公共类UpL { 公共项项{get;set;} } 公共类项目 { [JsonProperty(“docid”)]公共字符串docid; [JsonProperty(“代码”)]公共字符串代码; [JsonProperty(“名称”)]公共字符串名称; [JsonProperty(“状态”)]公共字符串状态; [JsonProperty(“type_id”)]公共字符串类型_id; }
错误:类型对象不能用于foreach语句。

应该在代码中重写什么以避免此错误。 如何正确解析此JSON?
我需要从Item类中获取所有项目。

我的第一条评论可能有点错误

我认为没有必要使用
UpL

您可以将JSON反序列化为
字典
,而不是
列表

编辑

以下是我的工作示例:

        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();
var json=@”{
""50"": {
“docid”:“5611”,
“代码”:“ГöСП11529-2016”,
“名称”:“名称”,
“”type_id”“:“”6”“,
“状态”:“0”
},
""51"": {
“docid”:“509”,
“代码”:“ГöСП11583-74”,
“名称”:“名称”,
“”type_id”“:“”6”“,
“状态”:“0”
},
""4000"": {
“docid”:“5611”,
“代码”:“ГöСП11529-2016”,
“名称”:“名称”,
“”type_id”“:“”6”“,
“状态”:“0”
}
}";
var dict=JsonConvert.DeserializeObject(json);
var items=dict.Select(x=>x.Value).ToList();

具有keyvaluepair的json。不需要类
UpL
。反序列化对象作为字典

        using (var r = new StreamReader(@"C:\Users\Admin\Desktop\Json.json"))
        {
            var json = r.ReadToEnd();
            var items = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
            foreach (var keyValuePair in items)
            {
                Console.WriteLine(keyValuePair.Value.name);
            }
        }
使用(var r=newstreamreader(@“C:\Users\Admin\Desktop\Json.Json”))
{
var json=r.ReadToEnd();

var items=JsonConvert.DeserializeObject(json); foreach(项目中的var keyValuePair) { Console.WriteLine(keyValuePair.Value.name); } }
调试器中的项是什么类型的?这是因为它不是
列表
,而是
字典
@ChetanRanpariya他的类很好,只是反序列化不正确。是的。。。您是对的@ThePerplexedEdictionary给出错误:Newtonsoft.Json.Json序列化异常-无法反序列化当前Json arrayNewtonsoft.Json.Json序列化异常:无法反序列化当前Json arrayIt适合我。您可能做错了,或者您的JSON无效。var items=JsonConvert.DeserializeObject(JSON);解决这个问题,谢谢你sir@RkCelsius对,所以你很方便地忽略了一个事实,那就是它是一个字典数组,而不仅仅是一个字典。下次请提供完整的JSON。@ThePerplexedOn,先生,我提供了完整的JSON文件。@Rk,您显然没有,否则我的代码会工作,
List