这是我的新答案。
使用JavaScriptSerializer
传入的 JSON 时会出现问题,如下所示:
[
{
"node_title":"<a href=\"/item/brickell-point\">Brickell Point</a>",
"main image":"<img typeof=\"foaf:Image\" src=\"http://collectionking.com/sites/default/files/styles/collection_list/public/BrickellPoint_front.jpg\" width=\"200\" height=\"250\" alt=\"\" />",
"nid":"123"
},
{
"node_title":"<a href=\"/item/flagler-street-bridge\">Flagler Street Bridge</a>",
"main image":"<img typeof=\"foaf:Image\" src=\"http://collectionking.com/sites/default/files/styles/collection_list/public/FlaglerStreetBridge_Miami_River.Front_.jpg\" width=\"200\" height=\"250\" alt=\"\" />",
"nid":"124"
}
]
并且有一个带有空格的图像属性......这是无法完成的,所以让我们为此使用JSON.NET。
第 1 步- 右键单击References
您的项目并选择Manage Nuget Packages
并在“在线”选项卡中安装 JSON.NET
之后,使用以下代码:
// grab information
using (var wc = new WebClient()) {
json = wc.DownloadString(url);
}
// deserialize using JSON.NET
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<ck[]>(json);
// output
foreach (var i in result)
{
lblTitle.Text = i.node_title;
lblNid.Text = i.nid;
imgCk.ImageUrl = i.main_image;}
}
并记住将您的ck
对象修改为
public class ck
{
public string node_title { get; set; }
public string nid { get; set; }
[Newtonsoft.Json.JsonProperty(PropertyName = "main image")]
public string main_image { get; set; }
}
我们使用JsonProperty
来映射我们收到的正确属性。
为了从标签中提取标题和图像,因为我不喜欢 RegEx,我使用:
private static string ExtractImageFromTag(string tag)
{
int start = tag.IndexOf("src=\""),
end = tag.IndexOf("\"", start + 6);
return tag.Substring(start + 5, end - start - 5);
}
private static string ExtractTitleFromTag(string tag)
{
int start = tag.IndexOf(">"),
end = tag.IndexOf("<", start + 1);
return tag.Substring(start + 1, end - start - 1);
}
所以你可以自己使用它:
// output
foreach (var i in result)
{
// for this example, let's grab the last
lblTitle.Text= ExtractTitleFromTag(i.node_title);
lblNid.Text= i.nid;
imgCk.ImageUrl= ExtractImageFromTag(i.main_image);
}
现在......您确实意识到您foreach
只会获得接收 JSON 的最后一个条目吗?因为你不是
你应该简单地做:
foreach (var i in result)
{
i.node_title = ExtractTitleFromTag(i.node_title);
i.main_image = ExtractImageFromTag(i.main_image);
}
例如,使用 DataGrid 显示的不仅仅是一个条目。
myDataGrid.Source = ck;