2

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

例如,如果我有一个 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 层深)。

4

1 回答 1

3

我尝试为自定义会话状态模块执行此操作,并且在将需要类型数据的对象序列化为 JSON 时必须考虑许多边缘情况,默认情况下没有类型概念。一种简单的方法是通过使用强制 ServiceStack 将类型信息序列化为 JSON

JSConfig.includeTypeInfo = true;

在您的 AppHost 初始化方法中。这将告诉 ServiceStack 将“__type”属性包含到它序列化为 JSON 的每个对象中,包括字符串和整数以及基本类型。这代表了很多开销,特别是如果您在一个不需要每个序列化的类型信息的大型项目中。

或者,如果您只想为这个嵌套对象实现自己的类型系统,则必须实现它Dictionary。我最终做到了这一点,并且花了一段时间才正确。

最后,Mythz(ServiceStack 的负责人)的这篇文章说,如果您将其序列化为接口,它将包含类型信息。我已经独立验证了这种情况,因此,如果您可以控制嵌套字典中的内容,并且可以将它们全部限制在一个界面中,则可以使其正常工作。

在 ServiceStack JSON 中输入信息

于 2013-08-21T18:59:09.337 回答