通过JsonConvert读取并解析C#中的Json文件
我有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"
{
"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
。