首页 > 解决方案 > JsonSerializer.Deserialize 无法推断用法

问题描述

如果我只将字符串传递给该方法,VS2019 会给出无法推断用法的错误。

如果我这样写

JsonSerializer.Deserialize(text);
JsonSerializer.Deserialize(text.AsSpan());

两者都给出相同的错误。因为字符串可以转换为跨度。

但正如反序列化文档中所述,非泛型类型应该可以工作。但我在这里得到的是泛型类型。

杰森小提琴

我试图谷歌但没有导致任何结果。

在此处输入图像描述

标签: c#.net-corejsonserializer

解决方案


您突出显示的方法采用一个类型参数,即保存反序列化数据的 C# 对象的类型。您需要指定类型参数,或者使用将对象类型作为第二个参数的重载:

using System;
using System.Text.Json;

namespace ConsoleApp1
{
    class Data
    {
        public bool Enabled { get; set; }

        public override string ToString()
        {
            return Enabled.ToString();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            String json = "{ \"Enabled\" : true }";
            // Using 2 different overload to deserialize data.
            Data data = JsonSerializer.Deserialize<Data>(json);
            Console.WriteLine(data);
            var data2 = JsonSerializer.Deserialize(json, typeof(Data));
            Console.WriteLine(data2);
        }
    }
}

推荐阅读