ServiceStack.Text将json反序列化为对象始终转换为字符串并使用引号表现奇怪

我想做什么:

我有json对象,其值可以是字符串,整数,双精度或任何这些的列表。 我正在尝试将这些json字符串反序列化为C#对象,但由于它们可能有多种类型,因此我坚持使用通用对象,而不是强类型替代。

我的问题:似乎ServiceStack.Text.JsonSerializer.DeserializeFromString(jsonString)函数在T = object的情况下表现得很奇怪。 它总是将事物视为字符串,并且不适用于引号。

这是一个例子:

string json1 = "[1]"; string json2 = "[1,2]"; string json3 = "['hello']"; string json4 = "['hello','world']"; string json5 = "[\"hello\"]"; string json6 = "[\"hello\",\"world\"]"; object o1 = JsonSerializer.DeserializeFromString(json1); object o2 = JsonSerializer.DeserializeFromString(json2); object o3 = JsonSerializer.DeserializeFromString(json3); object o4 = JsonSerializer.DeserializeFromString(json4); object o5 = JsonSerializer.DeserializeFromString(json5); object o6 = JsonSerializer.DeserializeFromString(json6); 

预期的基础对象:

 object type value o1 List [1] o2 List [1,2] o3 List ['hello'] o4 List ['hello','world'] o5 List ["hello"] o6 List ["hello","world"] 

实际相关对象:

 object type value o1 String "[1]" o2 String "[1,2]" o3 String "['hello']" o4 String "['hello','world']" o5 String "[" o6 String "[" 

作为参考,使用Newtonsoft.Json的相应代码块将底层对象解释为Netwonsoft.Json.Link.JArray。

就目前而言,我必须确保在json中使用单引号,然后反序列化递归提取的任何字符串,直到所有内容都被正确提取。

我有什么办法让我的行为与使用ServiceStack.Text的方式相同吗?

ServiceStack的文本序列化程序通过将JSON转换为指定的模式来工作,当您使用对象时,它无法提前推断出类型,因此为了在运行时执行此操作,ServiceStack的JSON Serializer需要发出专有的__type元数据属性,告诉反序列化器将其反序列化为什么。 这只是为JSON Object文字而不是数组发出的,这就是为什么它在这里不起作用的原因。

以下是一些反序列化数组的方法:

 string json6 = "[\"hello\",\"world\"]"; var list = json6.FromJson>(); list.PrintDump(); var array = json6.FromJson(); array.PrintDump(); var arrayObj = json6.FromJson(); arrayObj.PrintDump();