[英]How to use JSON.Net to read JSON and output HTML?
如何使用JSON.Net并循环使用以下JSON为“photos”对象的每个成员输出一个HTML图像标记(字符串)?
我的目标是阅读以下JSON并输出以下字符串:
"<img src='/images/foo.jpg' alt='Hello World!'><img src='/images/bar.jpg' alt='Another Photo' />"
JSON存储在外部文件“photos.json”中
{
"photos": {
"photo1": {
"src": "/images/foo.jpg",
"alt": "Hello World!"
},
"photo2": {
"src": "/images/bar.jpg",
"alt": "Another Photo"
}
}
}
我开始使用类似于此处所示的代码: http : //www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx
var client = new WebClient();
client.Headers.Add("User-Agent", "Nobody");
var response = client.DownloadString(new Uri("http://www.example.com/photos.json"));
JObject o = JObject.Parse(response);'
//Now o is an object I can walk around...
但是,我没有找到一种方法来“走动o”,如示例所示。
我想遍历照片对象的每个成员,阅读属性并为每张照片添加html到我的字符串。
到目前为止,我已经尝试过这里显示的示例: http : //james.newtonking.com/json/help/index.html?topic = html / QueryJson.htm但是,我无法让它们在每个循环中运行一次。
以下是如何“遍历”您的JObject
以提取您需要的信息。
string json = @"
{
""photos"": {
""photo1"": {
""src"": ""/images/foo.jpg"",
""alt"": ""Hello World!""
},
""photo2"": {
""src"": ""/images/bar.jpg"",
""alt"": ""Another Photo""
}
}
}";
StringBuilder sb = new StringBuilder();
JObject o = JObject.Parse(json);
foreach (JProperty prop in o["photos"].Children<JProperty>())
{
JObject photo = (JObject)prop.Value;
sb.AppendFormat("<img src='{0}' alt='{1}' />\r\n",
photo["src"], photo["alt"]);
}
Console.WriteLine(sb.ToString());
输出:
<img src='/images/foo.jpg' alt='Hello World!' />
<img src='/images/bar.jpg' alt='Another Photo' />
首先,您需要定义一个包含数据的类,并且还能够将自己输出为HTML标记:
public class Photo
{
public string Src { get; set; }
public string Alt { get; set; }
public string ToHtml()
{
return string.Format(
"<img src='{0}' alt='{1}'/>,
this.Src,
this.Alt);
}
}
为了能够使用JSON.Net创建类型化对象,您需要“规范化”您的JSON - 它并不完全采用通常的格式来指示相同对象的数组。 你必须完全摆脱标识符photo*1*, photo*2*,.., photo*n*
,或者你必须使它们相同(即它们都应该只是photo
,没有数字)。 如果您可以控制JSON创建,那么您可以在那里完成。 否则,您必须相应地操作Web响应(例如,使用string.Replace(...)
)。
完成后,您可以使用JSON.Net获取类型列表,然后您可以简单地遍历它以获取所需的HTML:
var client = new WebClient();
client.Headers.Add("User-Agent", "Nobody");
string response = client.DownloadString(new Uri("http://www.example.com/photos.json"));
// --> 'Normalize' response string here, if necessary
List<Photo> photos = JsonConvert.DeserializeObject<List<Photo>>(response);
// now buid the HTML string
var sb = new StringBuilder();
foreach(photo in photos)
{
sb.Append(photo.ToHtml());
}
string fullHtml = sb.ToString();
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.