これが私の新しい答えです。
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"
}
]
スペースを含むimageプロパティがあります...これは実現できないので、これには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
をマップします。
タグからタイトルと画像を抽出し、正規表現が気に入らないようにするために、次を使用します。
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);
}
さて...あなたは、受信するJSONの最後のエントリしか取得できないことに気づいていますか?foreach
あなたはそうではないので
あなたは単にするべきです:
foreach (var i in result)
{
i.node_title = ExtractTitleFromTag(i.node_title);
i.main_image = ExtractImageFromTag(i.main_image);
}
たとえば、DataGridを使用して、エントリ以上のものを表示します。
myDataGrid.Source = ck;