【问题标题】:System.Text.Json JsonSerializer.Deserialize<TValue>(...) cannot deserialize object[] typeSystem.Text.Json JsonSerializer.Deserialize<TValue>(...) 无法反序列化 object[] 类型
【发布时间】:2020-12-06 07:53:19
【问题描述】:

我想将我的JSON 字符串值解析为object[] 类型,但它总是返回System.Text.Json.JsonElement[] 类型。

var data = JsonSerializer.Deserialize<object[]>("[\"abcd\",\"efgh\",\"ijkl\",\"mnop\"]", null);
foreach (var _ in data) Console.WriteLine(_.GetType().FullName);

预期输出:

System.Object
System.Object
System.Object
System.Object

实际输出:

System.Text.Json.JsonElement
System.Text.Json.JsonElement
System.Text.Json.JsonElement
System.Text.Json.JsonElement

这里有什么问题?

【问题讨论】:

    标签: c# .net-core system.text.json .net-5


    【解决方案1】:

    没有错。

    您正在获取Object 元素的数组,但实际元素的类型为JsonElement。它继承自Object

    此外,您不能将\"abcd\" 字符串存储在Object 类型的内存区域中。它将是stringJsonElement 或其他东西。但是您可以在Object 类型变量中保留对它的引用。 例如 foreach (Object _ in data) Console.WriteLine(_.GetType().FullName); 也可以。

    【讨论】:

    • 感谢您的回答。我试过foreach (Object _ in data) Console.WriteLine(_.GetType().FullName);,但它仍然返回JsonElement而不是Object。我需要将它们存储为object[],因为我需要将它们类型转换为另一个原始类型,如stringfloatint 等。如果我将它们存储为JsonElement,它不能被转换为string 和其他人。
    • 你想要达到的目标是不可行的。 json 反序列化器不是那么聪明。它不知道这些值的确切类型,也无法区分它是字符串还是整数,还是浮点数。在您的情况下,您必须手动执行此操作。 JsonElement 有 Get... 和 TryGet... 方法。这是参考:docs.microsoft.com/en-us/dotnet/api/…
    • 哦,我明白了,好吧,我想我会手动进行转换。谢谢你的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2022-11-16
    • 1970-01-01
    • 2021-07-17
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多