4

我试图找出在 .NET 3.5 中解析传入 JSON 服务器端的最佳方法。我从 JSON 格式的 HttpWebResponse 接收“标题”。所以我必须检索每个标题并存储在数据库中。所以请提供检索每个标题的代码。

public class MyObject
{
    public ArrayList list { get; set; }
}

    var request = WebRequest.Create("https://api.dailymotion.com/videos?fields=description,thumbnail_medium_url%2Ctitle&search=Good+Morning");
    using (var twitpicResponse = (HttpWebResponse)request.GetResponse())
    {
        using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string objText = reader.ReadToEnd();
            MyObject myojb = (MyObject)js.Deserialize(objText, typeof(MyObject));
        }
    }

我在 myojb 中收到标题,但如何从 myojb 中检索每个标题。

4

3 回答 3

11

使用这段代码片段Title通过使用dynamic对象来获取。

.NET 4.0 及更高版本

JavaScriptSerializer js = new JavaScriptSerializer();
var obj = js.Deserialize<dynamic>(reader.ReadToEnd());
foreach (var o in obj["list"])
{
    var title = o["title"];
}

.NET 3.5 及以下

JavaScriptSerializer js = new JavaScriptSerializer();
var obj = js.Deserialize<Dictionary<string, object>>(reader.ReadToEnd());
foreach (var o in (ArrayList)obj["list"])
{
    if (o is Dictionary<string, object>)
        var title = (o as Dictionary<string, object>)["title"];
}

使用 Linq:

JavaScriptSerializer js = new JavaScriptSerializer();
var obj = js.Deserialize<Dictionary<string, object>>(reader.ReadToEnd());
var titles = ((ArrayList)obj["list"]).Cast<Dictionary<string, object>>()
                 .Select(s => s["title"].ToString()).ToArray<string>();
于 2012-11-07T14:25:18.080 回答
4

序列化为dynamic对象

using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
{
    JavaScriptSerializer js = new JavaScriptSerializer();
    var objects = js.Deserialize<dynamic>(reader.ReadToEnd());
    foreach (var o in objects)
    {
        Console.WriteLine(o["title"]);
    }
}
于 2012-11-07T13:59:02.143 回答
0

“我正在尝试找出解析传入 JSON 的最佳方法”

我会使用 json.net。反序列化/序列化 json 数据非常容易。

看看这里:

如何将 JSON 发布到服务器?

于 2012-11-07T13:58:19.360 回答