C# 如何使用动态(数字)键名反序列化子对象?
如何反序列化此JSON数据?按键“100034”等本质上是动态的C# 如何使用动态(数字)键名反序列化子对象?,c#,json,json.net,C#,Json,Json.net,如何反序列化此JSON数据?按键“100034”等本质上是动态的 { "users" : { "100034" : { "name" : "tom", "state" : "WA", "id" : "cedf-c56f-18a4-4b1" }, "10045" : { "name" : "steve", "sta
{
"users" : {
"100034" : {
"name" : "tom",
"state" : "WA",
"id" : "cedf-c56f-18a4-4b1"
},
"10045" : {
"name" : "steve",
"state" : "NY",
"id" : "ebb2-92bf-3062-7774"
},
"12345" : {
"name" : "mike",
"state" : "MA",
"id" : "fb60-b34f-6dc8-aaf7"
}
}
}
是否有一种方法可以直接访问具有名称、状态和Id的每个对象?对于具有不同属性名称的JSON对象,您可以使用
字典
代替常规类,其中T
是表示项数据的类
像这样声明您的类:
class RootObject
{
public Dictionary<string, User> users { get; set; }
}
class User
{
public string name { get; set; }
public string state { get; set; }
public string id { get; set; }
}
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
对于属性名称可能不同的JSON对象,可以使用
字典
代替常规类,其中T
是表示项数据的类
像这样声明您的类:
class RootObject
{
public Dictionary<string, User> users { get; set; }
}
class User
{
public string name { get; set; }
public string state { get; set; }
public string id { get; set; }
}
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
public class internet
{
public List<User> Users { get; set; }
};
public class User
{
public String Name { get; set; }
public String Id { get; set; }
public String State { get; set; }
};
公共类互联网
{
公共列表用户{get;set;}
};
公共类用户
{
公共字符串名称{get;set;}
公共字符串Id{get;set;}
公共字符串状态{get;set;}
};
var JSONDATA = /* Your JSON String */;
JavaScriptSerializer serializer = new JavaScriptSerializer();
internet Intr = serializer.Deserialize<internet>(JSONDATA);
var JSONDATA=/*您的JSON字符串*/;
JavaScriptSerializer serializer=新的JavaScriptSerializer();
internet Intr=序列化程序.反序列化(JSONDATA);
public class internet
{
public List<User> Users { get; set; }
};
public class User
{
public String Name { get; set; }
public String Id { get; set; }
public String State { get; set; }
};
公共类互联网
{
公共列表用户{get;set;}
};
公共类用户
{
公共字符串名称{get;set;}
公共字符串Id{get;set;}
公共字符串状态{get;set;}
};
var JSONDATA = /* Your JSON String */;
JavaScriptSerializer serializer = new JavaScriptSerializer();
internet Intr = serializer.Deserialize<internet>(JSONDATA);
var JSONDATA=/*您的JSON字符串*/;
JavaScriptSerializer serializer=新的JavaScriptSerializer();
internet Intr=序列化程序.反序列化(JSONDATA);
此处不重复原因的可能重复。。它的非法c#标识符和它的不重复原因的动态可能的重复。。它的非法c#标识符和动态alsoas(我前面提到的键是动态的)。。在这种情况下,您的解决方案将如何工作?我怎么知道要传递什么作为密钥?你试过了吗?字典在反序列化期间处理动态键。通过迭代字典中的keys
集合来发现键是什么是很简单的。我在回答中添加了一个演示。@BrianRogers谢谢,Roger它帮了我很多忙。但是,你能告诉我,我们是否收到了一个没有任何键的回复,但在其内部细节中有键。我找不到办法。e、 g.在我的情况下,我接收到此类/相同类型的响应,但响应对象没有键。那么我将如何反序列化它,因为数据即将到来,但在反序列化之后,它将给出null。(我的响应对象的形状类似于{“10101”:{“名称”:“aaa”,“描述”:“aaa111”},{“20202”:{“名称”:“bbb”,“描述”:“bbb222”}}}}}}@MalikAsif将此作为一个新问题发布,以便您可以充分描述您所面临的问题。如果需要提供上下文,您可以链接回这个问题。我相信您救了很多生命。Brian。谢谢:)正如我前面提到的,键是动态的。。在这种情况下,您的解决方案将如何工作?我怎么知道要传递什么作为密钥?你试过了吗?字典在反序列化期间处理动态键。通过迭代字典中的keys
集合来发现键是什么是很简单的。我在回答中添加了一个演示。@BrianRogers谢谢,Roger它帮了我很多忙。但是,你能告诉我,我们是否收到了一个没有任何键的回复,但在其内部细节中有键。我找不到办法。e、 g.在我的情况下,我接收到此类/相同类型的响应,但响应对象没有键。那么我将如何反序列化它,因为数据即将到来,但在反序列化之后,它将给出null。(我的响应对象的形状类似于{“10101”:{“名称”:“aaa”,“描述”:“aaa111”},{“20202”:{“名称”:“bbb”,“描述”:“bbb222”}}}}}}@MalikAsif将此作为一个新问题发布,以便您可以充分描述您所面临的问题。如果需要提供上下文,您可以链接回这个问题。我相信您救了很多生命。Brian。谢谢:)这将不起作用,因为JSON不包含列表(数组)。这将不起作用,因为JSON不包含列表(数组)。