2013-04-17 62 views
0

轉換一個Javascript JSON.stringfy字符串對象我正在開發Windows 8應用,和我有一些JavaScript存儲序列化對象到漫遊設置,即:使用C#JSON.NET

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); 

這給出了一個錯誤:

Error reading string. Unexpected token: StartObject. Path '[0]', line 1, position 2.

所以我在做什麼,我都一直在努力的最後幾個小時的損失,我用c#相當陌生,因此訴諸計算器的幫助; d提前

感謝您的任何幫助:)

Andy

回答

1

您正嘗試將您的JSON數組解析爲字符串列表,這不起作用。您提供的JSON對象實際上是一個包含名爲'id'的整數屬性的對象列表。

也許嘗試用該屬性創建一個類(比如MyClass),然後反序列化爲List。

+0

啊我明白了,覺得很傻,現在問:d – Andy

1

您的JSON containts對象的集合與id財產,是這樣的:

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

那麼你可以做:

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

由於IdObject類有一個屬性id以符合您的json序列化的值,它將被映射回來。

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); 
}