Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当键值未知时反序列化JSON_C#_Json_Json.net - Fatal编程技术网

C# 当键值未知时反序列化JSON

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

如何在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-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);