使用c#JSON.NET将Javascript JSON.stringfy字符串转换为对象

时间:2013-04-17 08:31:41

标签: c# json windows-8 json.net

我正在开发一个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

提前感谢您的任何帮助:)

安迪

3 个答案:

答案 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,所以它将被映射回来。