如何将JSON反序列化为C#字典?

时间:2017-05-18 15:36:32

标签: c# json dictionary json-deserialization

问题

继承我的JSON对象:

{
    "1000":{
               "id": "23445",
               "latlon": "6780" 
           },
    "1001":{
               "id": "23454",
               "latlon": "6784" 
           },
    "1002":{
               "id": "23245",
               "latlon": "6180" 
           },
    "1003":{
               "id": "12345",
               "latlon": "6740" 
           }
}

如您所见,属性名称是纯整数(1000,1001,1002,1003)

我无法在integar中声明类变量名并运行System.json.Serialization。

因此我需要将JSON文件加载到:

public static Dictionary<int, NodeDetail> NodeInfo;

public class NodeDetail {
    public ulong id;
    public int latlon;

    //Generic class serializer

    //Generic class deserializer
}

这是否有库函数?或者我是否必须从头开始解析JSON字符串?

PS。我是C#的新手(来自C ++)

1 个答案:

答案 0 :(得分:2)

Newtonsoft.Json。你可以从NuGet中获取它。

简单示例:

public static T DeserializeJson<T>(string json)
{
    return JsonConvert.DeserializeObject<T>(json);
}

然后

Dictionary<string, object> foo = DeserializeJson<Dictionary<string, object>>(" ... insert JSON here ... ");

编辑:鉴于您在问题中提到的结构,您可能希望反序列化为嵌套字典:

Dictionary<int, Dictionary<long, int>> foo = DeserializeJson<Dictionary<int, Dictionary<long, int>>>(" ... insert JSON here ...");

还有JObject(在相同的Newtonsoft.Json库中),它非常有助于反序列化为可以使用的统一内容。