ServiceStack.Text json 序列化器反序列化带括号的原始字符串为jsv

ServiceStack.Text json serializer deserializes raw string with brackets as jsv

我有一些 JSON 文本,我想将其反序列化为 Dictionary<string, object>。 ServiceStack.Text 没问题,直到字符串值中有括号。然后它决定反序列化该字符串,就好像它是 JSV(ServiceStack 的格式,类似于 json 但没有引号)。

这是一个简化的 JSON 示例:

{
  "prop1": "value1",
  "prop2": "{tag} value2"
}

代码:

JsConfig.Init(new Config
{
    ConvertObjectTypesIntoStringDictionary = true,
});
            
// json variable is a string, read from a file
var tree = JsonSerializer.DeserializeFromString<Dictionary<string, object>>(json);

这是我得到的损坏结果(以 json 形式返回):

{
  "prop1": "value1",
  "prop2": {
    "tag}": "alue2"
  }
}

只有当大括号紧跟在引号之后时才会出现这种情况。

Newtonsoft 序列化程序在这种情况下按预期工作,但如果我能找到解决方案或解决方法,我真的不想进行切换。

ServiceStack.Text 的 JSON 序列化程序主要用于将 JSON 反序列化为类型化的 POCO。

为了将 artibtrary JSON 反序列化为无类型集合,建议使用 JS Utils 代替,例如:

var obj = (Dictionary<string, object>)JSON.parse(json);