gpt4 book ai didi

c# - ServiceStack.Text 将 json 反序列化为对象总是转换为字符串并且使用引号时行为异常

转载 作者:行者123 更新时间:2023-11-30 16:19:26 27 4
gpt4 key购买 nike

我正在尝试做的事情:

我有 json 对象,其值可以是字符串、整数、 double 或其中任何一个的列表。我试图将这些 json 字符串反序列化为 C# 对象,但因为它们可能有多种类型,所以我只能使用通用对象,而不是强类型替代对象。

我的问题:在 T = object 的情况下,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 的相应代码块将底层对象解释为 Netwonsoft.Json.Link.JArray。

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

我可以做些什么来让它按照我喜欢的方式使用 ServiceStack.Text 吗?

最佳答案

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

这里有一些反序列化数组的方法:

string json6 = "[\"hello\",\"world\"]";

var list = json6.FromJson<List<string>>();
list.PrintDump();

var array = json6.FromJson<string[]>();
array.PrintDump();

var arrayObj = json6.FromJson<object[]>();
arrayObj.PrintDump();

关于c# - ServiceStack.Text 将 json 反序列化为对象总是转换为字符串并且使用引号时行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345422/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com