Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ServiceStack反序列化嵌套JSON对象_C#_Json_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,Json,servicestack" /> servicestack,C#,Json,servicestack" />

C# 使用ServiceStack反序列化嵌套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

我正在使用ServiceStack序列化/反序列化JSON请求。我要做的是获取一个复杂的JSON对象(带有嵌套对象),并将其转换为嵌套对象字典(Dictionary)

例如,如果我有一个JSON对象,如:

{ 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"