2013-08-21 99 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