我正在开发一个Windows 8应用程序,我有一些javascript将序列化对象存储到漫游设置中,即:
var object = [{"id":1}, {"id":2}]
roamingSettings.values["example"] = JSON.stringify(object);
我还有应用程序的c#部分(用于运行后台任务),需要读取该JSON,并将其转换为对象,以便我可以迭代它。这就是我遇到一些问题的地方,我正在使用JSON.NET来完成这项工作,但我转过来的每件事都会出现错误:
// this looks like "[{\"id\":1},{\"id\":2}]"
string exampleJSON = roaming.Values["example"].ToString();
// dont know if this is correct:
List<string> example = JsonConvert.DeserializeObject<List<string>>(exampleJSON );
出现错误:
读取字符串时出错。意外的令牌:StartObject。路径'[0]',第1行,第2位。
所以我不知所措,我最近几个小时都在研究它,而且我对c#非常不熟悉,所以求助于stackoverflow; D
提前感谢您的任何帮助:)
安迪
答案 0 :(得分:2)
Json.Net有一个很好的方法DeserializeAnonymousType
。无需申报临时课程。
string json = "[{\"id\":1},{\"id\":2}]";
var anonymous = new []{new{id=0}};
anonymous = JsonConvert.DeserializeAnonymousType(json,anonymous);
foreach (var item in anonymous)
{
Console.WriteLine(item.id);
}
您甚至可以使用dynamic
关键字
dynamic dynObj = JsonConvert.DeserializeObject(json);
foreach (var item in dynObj)
{
Console.WriteLine(item.id);
}
答案 1 :(得分:1)
您正在尝试将JSON数组解析为字符串列表,但这不起作用。您提供的JSON对象实际上是包含名为“id”的整数属性的对象列表。
也许尝试只使用该属性创建一个类(比如MyClass),然后反序列化为List。
答案 2 :(得分:1)
你的json包含一个具有id
属性的对象集合,如下所示:
class IdObject {
public int id { get; set; }
}
然后你可以这样做:
JsonConvert.DeserializeObject<List<IdObject>>(exampleJSON);
因为IdObject
类具有与您的json序列化值匹配的属性id
,所以它将被映射回来。