C# 如何反序列化json并在c中检索特定属性值#

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

我对使用C#(使用VS2017)的JSON非常陌生。尝试通过代码访问此对象的每个元素(例如,获取字符串
“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;