C# 当键值未知时反序列化JSON
如何在C#中使用JSON.net反序列化JSON,其中键值未知(它们是多个设备的MAC地址)。可能有一个或多个关键条目C# 当键值未知时反序列化JSON,c#,json,json.net,C#,Json,Json.net,如何在C#中使用JSON.net反序列化JSON,其中键值未知(它们是多个设备的MAC地址)。可能有一个或多个关键条目 { "devices": { "00-00-00-00-00-00-00-00": { "name":"xxx", "type":"xxx", "hardwareRevision":"1.0", "id":"00-00-00-00-00
{
"devices":
{
"00-00-00-00-00-00-00-00":
{
"name":"xxx",
"type":"xxx",
"hardwareRevision":"1.0",
"id":"00-00-00-00-00-00-00-00"
},
"01-01-01-01-01-01-01-01":
{
"name":"xxx",
"type":"xxx",
"hardwareRevision":"1.0",
"id":"01-01-01-01-01-01-01-01"
},
}
}
您可以使用字典将MAC地址存储为密钥:
public class Device
{
public string Name { get; set; }
public string Type { get; set; }
public string HardwareRevision { get; set; }
public string Id { get; set; }
}
public class Registry
{
public Dictionary<string, Device> Devices { get; set; }
}
根据这里的答案,json.net将非常容易地为您做到这一点 它看起来像这样:
public class Contract
{
public IDictionary<string, Device> Devices { get; set; }
}
公共类合同
{
公共IDictionary设备{get;set;}
}
那就这样做吧
var result = JsonConvert.DeserializeObject<Contract>(myJson);
var result=JsonConvert.DeserializeObject(myJson);
您是否控制此json的可能副本?这是一份定义不明确的合同。最好将其格式化为数组,而不是对象<代码>“设备”:[{“名称”:“xxx”,“id”:“00-00-00-00-00”},{“名称”:“xxx”,“id”:“00-00-00-00-01”}]等等
public class Contract
{
public IDictionary<string, Device> Devices { get; set; }
}
var result = JsonConvert.DeserializeObject<Contract>(myJson);