我正在尝试使用JSON.NET反序列化某些内容。这是json1.json文件:
{
"items": [
{
"etag": "\"iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/fxbaeehYFMlvKKyJj6WLneDJn3o\"",
"snippet": {
"publishedAt": "2006-09-16T18:49:25.000Z",
"title": "New_Title_1"
}
}
]
}
这是我写的C#:(使用Newtonsoft.Json;)
public class Snippet
{
public string publishedAt { get; set; }
public string title { get; set; }
}
public class Item
{
public Snippet snippet { get; set; }
public string etag { get; set; }
}
public class RootObject
{
public List<Item> items { get; set; }
}
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var webClient = new System.Net.WebClient())
{
var json = webClient.DownloadString("c:\\users\\User\\documents\\WebApplication1\\WebApplication1\\json1.json");
Response.Write(json + "<br />");
Item a = JsonConvert.DeserializeObject<Item>(json);
Response.Write(a.etag + " ----- <br />");
}
}
}
}
此解决方案将构建正常,但a.etag不会打印任何内容。我哪里错了?另外:如何将已发布的和标题反序列化,因为它们嵌套在列表中(?)
答案 0 :(得分:3)
您没有反序列化Item
,而是RootObject
RootObject a = JsonConvert.DeserializeObject<RootObject>(json);
Response.Write(a.items[0].etag + " ----- <br />");
如果您希望List
有多个条目
RootObject a = JsonConvert.DeserializeObject<RootObject>(json);
foreach (Item item in a.items)
{
Response.Write(item.etag + " ----- <br />");
}
如果您只想拨打一个电话
RootObject a = JsonConvert.DeserializeObject<RootObject>(json);
StringBuilder sb = new StringBuilder();
foreach (Item item in a.items)
{
sb.Append(item.etag);
sb.AppendLine(" ----- <br />");
}
Response.Write(sb.ToString());
- 编辑
关于你的“另外:如何将已发布的和标题反序列化,因为它们嵌套在列表中?”:
只要您的类符合JSON数据格式,您就不必执行任何其他操作。在反序列化RootObject
时,它们将被反序列化。
您可以像访问所有属性一样访问它
string title = a.items[0].snippet.title;
答案 1 :(得分:-2)
如何对JSON进行故障排除的最佳方法是首先通过JSON.Net对其进行序列化,然后然后您可以比较类结构的结果(并对其进行适当的更改)
JsonConvert.SerializeObject(rootObject);
使用示例:
var rootObject = new RootObject
{
items = new List<Item>
{
new Item
{
etag = "123etag"
}
}
};
rootObject.items.FirstOrDefault().etag;