0

我正在开发一个 Windows 8 应用程序,并且我有一些将序列化对象存储到漫游设置中的 javascript,即:

var object = [{"id":1}, {"id":2}]
roamingSettings.values["example"] = JSON.stringify(object);

我也有应用程序的 ac# 部分(用于运行后台任务),它需要读取该 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

在此先感谢您的帮助:)

安迪

4

3 回答 3

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);
}
于 2013-04-17T08:50:06.067 回答
1

您正在尝试将 JSON 数组解析为字符串列表,但这是行不通的。您提供的 JSON 对象实际上是一个对象列表,其中包含一个名为“id”的整数属性。

也许尝试只使用该属性创建一个类(例如 MyClass),然后反序列化为 List。

于 2013-04-17T08:40:52.967 回答
1

您的 json 包含具有id属性的对象集合,如下所示:

class IdObject {
    public int id { get; set; }
}

然后你可以这样做:

JsonConvert.DeserializeObject<List<IdObject>>(exampleJSON);

因为这个IdObject类有一个属性id来匹配你的 json 序列化值,所以它会被映射回来。

于 2013-04-17T08:44:32.583 回答