如何将此JSON反序列化为C#类

时间:2018-08-18 13:33:32

标签: c# json json.net deserialization json-deserialization

我正在使用WebAPI,该WebAPI从请求中返回此json

{
    "apps": {
        "570": {
            "228983": {
                "8124929965194586177": "available"
            },
            "228990": {
                "1829726630299308803": "available"
            },
            "373301": {
                "840315559245085162": "available"
            },
            "373302": {
                "688854584180787739": "available"
            },
            "373303": {
                "3675525977143063913": "available"
            },
            "373305": {
                "4435851250675935801": "available"
            },
            "381451": {
                "6984541794104259526": "available"
            },
            "381452": {
                "1442783997179322635": "available"
            },
            "381453": {
                "6878143993063907778": "available"
            },
            "381454": {
                "7824447308675043012": "available"
            },
            "381455": {
                "5681120743357195246": "available"
            }
        },
        "674940": {
            "674941": {
                "6246860772952658709": "available"
            }
        }
    }
}

它返回一个AppID(int)列表,其中包含另一个DepotID列表,其中包含一个ManifestID(键),以及是否可用(值)。

我想反序列化为一类,以使其易于使用,但我无法想象如何做到这一点。我是C / C ++的C#新手

3 个答案:

答案 0 :(得分:3)

您可以使用Json.NET,它是C#的流行JSON库。参见Deserialize an Object

示例:

public class MyData
{
    public Dictionary<long, Dictionary<long, Dictionary<long, string>>> apps { get; set; }
}

var data = JsonConvert.DeserializeObject<MyData>(json);

// Use 'data.apps'

答案 1 :(得分:2)

您可以使用Newtonsoft.Json NuGet包并将数据反序列化为嵌套字典,如下所示:

var data = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, string>>>>>(File.ReadAllText("Data.json"));

为确保获得正确的数据,可以运行以下代码以将其打印出来:

foreach (var a in data) { Console.WriteLine(a.Key); foreach (var b in a.Value) { Console.WriteLine("\t" + b.Key); foreach (var c in b.Value) { Console.WriteLine("\t\t" + c.Key); foreach (var d in c.Value) { Console.WriteLine("\t\t\t" + d.Key + ": " + d.Value); } } } }

不太确定如何将此数据反序列化为类,因为它没有太多的属性名称...

答案 2 :(得分:2)

我不确定将其建模为C#类而没有属性名称(超出Json的“应用”级别)会获得多少收益,但是您可以这样做:

使用以下类为您的Json建模:

public class AppIds : Dictionary<string, DepotId> { }
public class DepotId : Dictionary<string, ManifestId> { }
public class ManifestId : Dictionary<string, string> { }

然后您可以使用Newtonsoft.Json

class Program
{
    static void Main(string[] args)
    {
        string jsonPath = @"c:\debug\data.json";
        System.IO.Stream s = new System.IO.FileStream(jsonPath,System.IO.FileMode.Open, System.IO.FileAccess.Read);

        AppIds data = JsonConvert.DeserializeObject<Dictionary<string, AppIds>>(File.ReadAllText(jsonPath))["apps"];
    }
}

enter image description here