如何使用 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;
我已经看到了一些其他类似的问题,但这些问题非常复杂 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.NetInstall-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 读取到 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;