如何反序列化 Json 对象?

How do I deserialize a Json object?

这是我用来反序列化 JSON.But 的代码,当我尝试在控制台中编写它时,它显示 "System.Collections.Generic.Dictionary`2[System.String, System.Object]"

System.Net.WebClient wc = new System.Net.WebClient();
string Jayson = wc.DownloadString("http://api.urbandictionary.com/v0/define?term=api");
object obj = JsonHelper.Deserialize(Jayson);
Dictionary<string, object> values = 
        JsonConvert.DeserializeObject<Dictionary<string, object>>(Jayson);
Console.WriteLine(values);

如何反序列化它并仅从 JSON 中提取 "definition"?

您可以创建一些具体类型以使用这些类型而不是更通用的类型进行映射和反序列化,例如:

public class Result
{

    [JsonProperty("definition")]
    public string Definition { get; set; }

    [JsonProperty("author")]
    public string Author { get; set; }

    [JsonProperty("permalink")]
    public string PermaLink { get; set; }

}

public class Results
{

    [JsonProperty("list")]
    public List<Result> List { get; set; }

    [JsonProperty("tags")]
    public List<string> Tags { get; set; }

}

然后:

var results = JsonConvert.DeserializeObject<Results>(json);

然后您可以迭代定义:

foreach(var result in results.List)
    Console.WriteLine(result.Definition);

Json.NET 将忽略它无法映射的其他属性,因此您可以根据需要 add/remove 它们。

只需将 json 字符串解析为 JObject,然后从中获取 "defenition" 属性

jObj = JObject.Parse("yourJsonString");    
string defenition = jo["definition"];

你得到 "System.Collections.Generic.Dictionary`2[System.String, System.Object]" 因为 Console.WriteLine 只能写字符串而且它不知道如何将字典变成字符串。

要打印所有条目,遍历集合并打印每个条目:

System.Net.WebClient wc = new System.Net.WebClient();
string Jayson = wc.DownloadString("http://api.urbandictionary.com/v0/define?term=api");
object obj = JsonHelper.Deserialize(Jayson);
Dictionary<string, object> values = 
        JsonConvert.DeserializeObject<Dictionary<string, object>>(Jayson);

foreach(var entry in values)
{
    Console.WriteLine($"{entry.Key} : {entry.Value}");
}