2012-12-22 59 views
1

net C#。我试图从web服务中解析Json。我用文字完成了它,但是在解析图像时遇到了问题。下面是从哪里m到处Json的解析C#中的Json图像问题#

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

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

回答

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

它可以帮助

2

你的问题是,你要设置的ImageUrl到这样的事情<img typeof="foaf:Image" src="http://...而不是实际的URL。您需要进一步解析main image并提取网址以正确显示它。

编辑

这是一个虽然坚果,因为空白的破解。我能找到的唯一解决方案是在解析字符串之前删除空白。这不是一个很好的解决方案,但我找不到使用内置类的其他方法。不过,您可以使用JSON.Net或其他一些库来正确解决此问题。

我还添加了一个正则表达式来为你提取网址,虽然没有错误检查这里有什么,所以你需要自己添加。

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; 
    } 
} 
+1

如何做到这一点? –

+0

对不起,在仔细查看json之后,我测试了这一点,看起来你的第一个问题是因为元素名称为'main image'中的空白。我会研究这个。 –

+0

是的,它似乎是..但至于我的知识是担心,我认为这个空白可以处理,但我不知道如何处理这个whitespce。你呢? –