这是我用来反序列化 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 中提取"定义"?
您可以创建一些具体类型来使用这些类型而不是更泛型的类型来映射和反序列化,例如:
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 将忽略它无法映射的其他属性,因此您可以根据需要添加/删除它们。
你得到的是"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}");
}
只需将 json 字符串解析为 JObject,然后从中获取 "defenition" 属性
jObj = JObject.Parse("yourJsonString");
string defenition = jo["definition"];