C# - 获取JSON嵌套数组值

时间:2016-03-24 04:08:11

标签: c# json

我试图找到答案,但我一定在寻找错误的条款。

我正在使用Windows手机应用程序,并从具有嵌套数组值“user.username”的API获取数据

void data_arrived(object sender, DownloadCompleteData e)
    {
        String data = e.data;
        JArray obj = JArray.Parse(data);
        for (int i = 0; i < obj.Count; i++)
        {

            JObject row = JObject.Parse(obj[i].ToString());
            var item = new DataList();
            item.country = row["title"].ToString() + " (€" + row["price"].ToString() + ") ";
            item.code = row["price"].ToString();
            item.imageURL = row["urlimage"].ToString();
            item.votes = row["votes"].ToString();
            item.category = row["category"].ToString();
            item.username = row["user.username"].ToString();
            list.Items.Add(item);
        }
    }

除user.username

外,其他所有工作正常

我该如何正确使用?

由于

2 个答案:

答案 0 :(得分:1)

您可以将有效的JSON字符串反序列化为动态对象。这将允许您使用点表示法访问基础对象。 e.g。

dynamic row = JsonConvert.DeserializeObject (obj[i].ToString());

你的最终代码块内部循环看起来像

dynamic row = JsonConvert.DeserializeObject(obj[i].ToString());

Console.WriteLine(row.title.ToString() + " (€" + row.price.ToString() + ") ");
Console.WriteLine(row.price.ToString());
Console.WriteLine(row.urlimage.ToString());
Console.WriteLine(row.votes.ToString());
Console.WriteLine(row.category.ToString());
Console.WriteLine(row.user.username.ToString());

Console.WriteLine();
Console.WriteLine("-----------------------------\n");

答案 1 :(得分:0)

没有“简单”的方法来实现这一目标,因为。在C#中保留。

但是,通过使用字典和集合初始化程序,您可以实现非常接近的目标。它仍然有点孤立,并且不需要您创建自定义类。

var obj = new Dictionary<string, object>
{
    { "user.username", "myvalue" }
};

var json = JsonConvert.SerializeObject(obj);
//{"user.username":"myvalue"}