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

时间:2017-07-01 06:24:01

标签: c# json

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

1 个答案:

答案 0 :(得分:1)

创建一个具有两个属性的类MyClass,int Id和string Name。

public class MyClass
{
    public int Id {get; set;}
    public string Name {get;set;}
}

然后,根据您的操作方式,您可以将其deserilize到Dictionary或创建具有三个MyClass属性的MyClassRoot对象。

我推荐使用Dictionary方法。 如果使用Dictionary方法,如果将更多属性添加到JSON,则代码仍然有效。如果您使用MyClassRoot解决方案,则需要在json更新时将相应的属性添加到MyClassRoot。

然后使用JSON.Net,您可以像这样反序列化对象。

var result = JsonConvert.DeserializeObject<Dictionary<string, MyClass>>(json);

“OBJ1”,“OBJ2”等将成为字典中的键,您可以访问如下值:

var obj1 = result["OBJ1"];
var obj1Name = obj1.Name;
var obj1Id = obj1.Id;

要将所有MyClass个对象添加到列表中,只需执行以下操作:

var list = result.ToList();

MyClassRoot方法(根本不推荐,只是一个POC):

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;