1

净 C#。我正在尝试从 Web 服务中解析 Json。我已经用文本完成了它,但解析图像有问题。这是我从中获取 Json 的网址

http://collectionking.com/rest/view/items_in_collection.json?args=122

这是我解析它的代码

using (var wc = new WebClient()) {
JavaScriptSerializer js = new JavaScriptSerializer();
var result = js.Deserialize<ck[]>(wc.DownloadString("http://collectionking.com/rest/view/items_in_collection.json args=122"));
foreach (var i in result) {
lblTitle.Text = i.node_title;
imgCk.ImageUrl = i.["main image"];
lblNid.Text = i.nid;

任何帮助都会很棒。提前致谢。PS:它返回标题和 Nid 但不返回图像。我的班级如下:

public class ck
{    
public string node_title;
public string main_image;
public string nid;  }
4

2 回答 2

2

您的问题是您将 ImageUrl 设置为类似这样的内容<img typeof="foaf:Image" src="http://...,而不是实际的 url。您将需要进一步解析main image和提取 url 以正确显示它。

编辑

由于空白,这是一个难以解决的问题。我能找到的唯一解决方案是在解析字符串之前删除空格。这不是一个很好的解决方案,但我找不到使用内置类的任何其他方法。不过,您也许可以使用JSON.Net或其他一些库正确解决它。

我还添加了一个正则表达式来为您提取 url,尽管没有错误检查这里的内容,因此您需要自己添加。

using (var wc = new WebClient()) {
    JavaScriptSerializer js = new JavaScriptSerializer();
    var result = js.Deserialize<ck[]>(wc.DownloadString("http://collectionking.com/rest/view/items_in_collection.json?args=122").Replace("\"main image\":", "\"main_image\":")); // Replace the name "main image" with "main_image" to deserialize it properly, also fixed missing ? in url
    foreach (var i in result) {
        lblTitle.Text = i.node_title;
        string realImageUrl = Regex.Match(i.main_image, @"src=""(.*?)""").Groups[1].Value;  // Extract the value of the src-attribute to get the actual url, will throw an exception if there isn't a src-attribute
        imgCk.ImageUrl = realImageUrl;
        lblNid.Text = i.nid;
    }
}
于 2012-12-22T08:24:16.083 回答
1

尝试这个

 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);
}

它可能会有所帮助

于 2012-12-22T13:02:31.033 回答