2013-08-21 138 views
2

反序列化嵌套的JSON對象我使用ServiceStack序列化/反序列化JSON請求。我正在做的是採取一個複雜的JSON對象(嵌套對象),並將其轉換爲嵌套對象字典(Dictionary)。與ServiceStack

舉例來說,如果我有這樣一個JSON對象:

{ a: "myA", 
    b: { "myB", true} 
} 

我想要一個解釋,以反映。因此,對於每個鍵/值:

key: a value: myA 
key: b value: Dictionary<string, object> 
    key: myB value: true 

我已經試過

var dict = JsonSerializer.DeserializeFromString<Dictionary<string, object>>(request); 

var dict = JsonObject.Parse(request); 

我到底是什麼了得到的是:

key: a value: myA 
key: b value: "myB:true" 

注意我需要這適用於無限嵌套的Json對象(即,我可以有3個, 4個,甚至5個深度)。

回答

3

我試圖做一個自定義會話狀態模塊,並且在將需要類型數據的對象序列化到JSON中時,必須考慮許多邊界情況,默認情況下它沒有類型的概念。一個簡單的方法來做到這一點是通過使用

JSConfig.includeTypeInfo = true;

在你APPHOST初始化方法強制ServiceStack序列化類型信息到JSON。這將告訴ServiceStack包括「__type」屬性到每一個對象將其序列化爲JSON,包括字符串和整數和基本類型。這代表了很多開銷,特別是如果您在大型項目中不需要每個序列化的類型信息。

或者,你將不得不如果你想它只是爲這一個嵌套的對象Dictionary實現自己的類型系統。我最終這樣做了,花了一段時間纔得到正確的結果。

最後,有一個從Mythz(ServiceStack鉛),這個職位它說,如果你把它序列化作爲一個接口,它將包括類型信息。我已經獨立驗證這是事實,所以如果你有過什麼事到嵌套的字典控制和它們全部限制爲一個接口,可以使它發揮作用。

type info in ServiceStack JSON