如何使用C#反序列化JSON数据?

时间:2015-04-03 14:47:42

标签: c# json serialization

我已经看到过这样的其他一些问题,但这些是非常复杂的JSON数据,它们在对象中有对象。尽管与我合作的JSON从来都不是静态的,但我怀疑它和那些一样复杂。此外,这是我第一次在C#中使用JSON,所以我有点无能为力。

我想要实现的是分离从我在C#中使用WebRequest提示的API接收的数据。

{
    "johhny.debt": {
         "id":35187540,
         "name":"johnny.debt",
         "profileIconId":786,
         "Level":30,
         "revisionDate":1428019045000
     }
 }

返回的JSON数据的方式与此类似。

我希望能够以下列方式访问上述字符串的所有属性:

ID:
名称:
~~
~~
~~ ......等等。

我假设必须为此制作某种类型的课程?

感谢所有帮助,提前谢谢大家。

2 个答案:

答案 0 :(得分:1)

只需创建一个这样的类

  public class RootObject
{
    public int Id { get; set; }
    public string  name { get; set; }
    public int profileIconId { get; set; }
    public int Level { get; set; }
    public string revisionDate { get; set; }
}

然后将json.Net和此代码安装到您的main方法

var jsonObject=JsonConvert.DeserializeObject<RootObject>(jsonText);

全部

<强>更新

 var obj = JObject.Parse(json);
    var RootObject = new RootObject()
    {
        Id = (int)obj["johhny.debt"]["id"],
        Level = (int)obj["johhny.debt"]["Level"],
        name = (string)obj["johhny.debt"]["name"],
        profileIconId = (int)obj["johhny.debt"]["profileIconId"],
        revisionDate = (string)obj["johhny.debt"]["revisionDate"]
    };

答案 1 :(得分:1)

从Nuget安装Json.Net

Install-Package Newtonsoft.Json

https://www.nuget.org/packages/Newtonsoft.Json/

声明内部对象({"id":..., "name": ... })的类:

public class InnerObject
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string  Username { get; set; }

    [JsonProperty("profileIconId")]
    public int ProfileIconId { get; set; }

    [JsonProperty("level")]
    public int Level { get; set; }

    [JsonProperty("revisionDate")]
    public string RevisionDate { get; set; }
}

如您所见,您可以使用JsonPropertyAttribute指定从json字段到.Net对象属性的重命名映射。

将你的json读到Dictionary<string,InnerObject>并获得&#34; johhny.debt&#34;的价值。键:

var dict = JsonConvert.DeserializeObject<Dictionary<string, InnerObject>>(jsonText);
var johhny = dict["johhny.debt"];

或者,如果您需要始终解析完全 json属性&#39; johhny.debt&#39;,您可以创建根对象类:

public class RootObject
{
    [JsonProperty("johhny.debt")]
    public InnerObject JohhnyDept { get; set; }
}

将其反序列化:

var root = JsonConvert.DeserializeObject<RootObject>(jsonText);
var johhny = root.JohhnyDebt;