我正在尝试做的事情:
我有 json 对象,其值可以是字符串、整数、双精度数或其中任何一个的列表。我试图将这些 json 字符串反序列化为 C# 对象,但因为它们可能有多种类型,所以我只能使用通用对象,而不是强类型的替代方案。
我的问题:在 T = 对象的情况下,ServiceStack.Text.JsonSerializer.DeserializeFromString(jsonString) 函数的行为似乎很奇怪。它始终将事物视为字符串,并且不适用于引号。
这是一个例子:
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<object>(json1);
object o2 = JsonSerializer.DeserializeFromString<object>(json2);
object o3 = JsonSerializer.DeserializeFromString<object>(json3);
object o4 = JsonSerializer.DeserializeFromString<object>(json4);
object o5 = JsonSerializer.DeserializeFromString<object>(json5);
object o6 = JsonSerializer.DeserializeFromString<object>(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 的相应代码块将底层对象解释为 Newtonsoft.Json.Linq.JArray。
按照目前的情况,我必须确保在 json 中使用单引号,然后反序列化递归提取的任何字符串,直到正确提取所有内容。
我可以做些什么来让它按照我想要的使用 ServiceStack.Text 的方式运行吗?