如何反序列化Json对象?

时间:2016-05-24 10:29:46

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

这是我用来反序列化JSON的代码。但是当我尝试在控制台中编写它时,它说“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中提取“定义”?

3 个答案:

答案 0 :(得分:2)

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

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将忽略它无法映射的其他属性,因此您可以根据需要添加/删除它们。

答案 1 :(得分:1)

您正在获取&#34; System.Collections.Generic.Dictionary`2 [System.String,System.Object]&#34;因为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}");
}

答案 2 :(得分:0)

只需将你的json字符串解析为JObject,然后获得&#34; defenition&#34;它的财产

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