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

How Can I Deserialize JSON Data Using C#?

我已经看到了一些其他类似的问题,但这些问题非常复杂 JSON 数据中包含对象。尽管我正在使用的 JSON 从来都不是静态的,但我怀疑它是否像那些一样复杂。另外,这是我第一次在 C# 中使用 JSON,所以我有点无能为力。

我想要实现的是将接收到的数据与我在 C# 中使用 WebRequest 提示的 API 分开。

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

返回的 JSON 数据是这样的。

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

ID :
姓名:
~~
~~
~~ ...等等。

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

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

像这样创建一个 class

  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 和此代码安装到您的主要方法中

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"]
    };

从 Nuget

安装 Json.Net
Install-Package Newtonsoft.Json

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

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

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> 并获取 "johhny.debt" 键的值:

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

或者如果您需要始终解析 exact json 属性 'johhny.debt',您可以创建根对象 class:

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

并反序列化它:

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