C# 如何反序列化json并在c中检索特定属性值#
我对使用C#(使用VS2017)的JSON非常陌生。尝试通过代码访问此对象的每个元素(例如,获取字符串C# 如何反序列化json并在c中检索特定属性值#,c#,json,C#,Json,我对使用C#(使用VS2017)的JSON非常陌生。尝试通过代码访问此对象的每个元素(例如,获取字符串“Obj1”,“Obj2”,“Obj3”,然后获取其每个成员的值(Id和名称) 我事先不知道会有多少个“ObjX”或它们的名称。我正在尝试将此列表加载到某个类中,然后将其转换为CSV(或SQL插入) 尝试使用JSON.net和JsonFx,但我认为我的技能不足以理解如何使用暴力字符串操作功能。有人能帮忙吗 { "OBJ1":{ "id":1, "name":"Na
“Obj1”
,“Obj2”
,“Obj3”
,然后获取其每个成员的值(Id和名称)
我事先不知道会有多少个“ObjX”或它们的名称。我正在尝试将此列表加载到某个类中,然后将其转换为CSV(或SQL插入)
尝试使用JSON.net和JsonFx,但我认为我的技能不足以理解如何使用暴力字符串操作功能。有人能帮忙吗
{
"OBJ1":{
"id":1,
"name":"Name1",
},
"OBJ2":{
"id":2,
"name":"Name2",
},
"OBJ3":{
"id":3,
"name":"Name3",
}
}
创建一个类MyClass,它有两个属性,int Id和string Name
public class MyClass
{
public int Id {get; set;}
public string Name {get;set;}
}
然后,根据您希望如何执行,您可以将其反序列化为字典,或者创建一个具有三个MyClass属性的MyClassRoot对象
我推荐字典法。
如果您使用字典方法,那么如果JSON中添加了更多属性,那么您的代码仍然有效。如果您使用MyClassRoot
解决方案,那么如果JSON更新,您需要将相应的属性添加到MyClassRoot
然后使用JSON.Net可以像这样反序列化对象
var result = JsonConvert.DeserializeObject<Dictionary<string, MyClass>>(json);
要将所有MyClass
对象添加到列表中,只需执行以下操作:
var list = result.ToList();
MyClassRoot方法(完全不推荐,只是POC):
公共类MyClassRoot
{
公共MyClass Obj1{get;set;}
公共MyClass Obj2{get;set;}
公共MyClass Obj3{get;set;}
}
var result=JsonConvert.DeserializeObject(json);
var obj1Name=result.Obj1.Name;
var obj1Id=结果.Obj1.Id;
Ok的可能重复-我需要提供更多细节,第一种方法更有效。响应中可能有无限ObjN,我想将它们加载到列表中。此外-我不知道“Obj1”、“Obj2”的名称提前,它们可能是我还没有看到的新值。我正在尝试构建的是将json转换成CSV的东西,带有代码(我知道有在线转换器,但这不是我的目标),你们太棒了-谢谢!
var list = result.ToList();
public class MyClassRoot
{
public MyClass Obj1 {get;set;}
public MyClass Obj2{get;set;}
public MyClass Obj3{get;set;}
}
var result = JsonConvert.DeserializeObject<MyClassRoot>(json);
var obj1Name = result.Obj1.Name;
var obj1Id = result.Obj1.Id;