C# 使用ServiceStack反序列化嵌套JSON对象
我正在使用ServiceStack序列化/反序列化JSON请求。我要做的是获取一个复杂的JSON对象(带有嵌套对象),并将其转换为嵌套对象字典(Dictionary) 例如,如果我有一个JSON对象,如:C# 使用ServiceStack反序列化嵌套JSON对象,c#,json,
servicestack,C#,Json,
servicestack,我正在使用ServiceStack序列化/反序列化JSON请求。我要做的是获取一个复杂的JSON对象(带有嵌套对象),并将其转换为嵌套对象字典(Dictionary) 例如,如果我有一个JSON对象,如: { a: "myA", b: { "myB", true} } 我想要一本反映这一点的词典。因此,对于每个键/值: key: a value: myA key: b value: Dictionary<string, object> key: myB v
{ a: "myA",
b: { "myB", true}
}
我想要一本反映这一点的词典。因此,对于每个键/值:
key: a value: myA
key: b value: Dictionary<string, object>
key: myB value: true
我最终得到的是:
key: a value: myA
key: b value: "myB:true"
注意,我需要为无限嵌套的JSON对象(即,我可以有3, 4个,甚至5个级别)工作。
< P>我试图为自定义会话状态模块做这件事,并且在将需要类型数据的对象序列化为JSON时,有很多边缘情况需要考虑,默认情况下,没有类型的概念。一种简单的方法是强制ServiceStack使用JSConfig.includeTypeInfo=true代码>
在AppHost初始化方法中。这将告诉ServiceStack在它序列化为JSON的每个对象中包含“\uuuu type”属性,包括字符串、int和基本类型。这意味着大量的开销,尤其是在大型项目中,不需要为每个序列化提供类型信息
或者,如果您只想为这一个嵌套对象字典,则必须实现自己的类型系统。我最终做了这件事,花了一段时间才恢复正常
最后,有一篇来自Mythz(ServiceStack的负责人)的文章说,如果将其序列化为接口,它将包含类型信息。我已经独立地验证了这一点,因此,如果您能够控制嵌套字典中的内容,并且可以将它们全部限制在一个接口中,那么就可以让它工作
var dict = JsonObject.Parse(request);
key: a value: myA
key: b value: "myB:true"