我试图找到答案,但我一定在寻找错误的条款。
我正在使用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
外,其他所有工作正常我该如何正确使用?
由于
答案 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"}