JsonSerializer.Deserialize не может вывести использование - PullRequest
0 голосов
/ 17 апреля 2020

если я передам строку только методу, VS2019 выдаст ошибку, что использование не может быть выведено.

если я напишу вот так

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

, то оба выдают одну и ту же ошибку. как строка может быть преобразована в промежуток

, но, как упоминалось в документации по десериализации , тип none generi c должен работать. но здесь я получаю тип c.

Json Fiddle

Я пытался Google, но не привел ни к какому результату ,

enter image description here

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Методы, которые вы выделили, принимают один параметр типа, который является типом объекта 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);
        }
    }
}
0 голосов
/ 17 апреля 2020

Вы не вызываете правильный метод, чтобы использовать не универсальный c, вам нужно указать тип во втором аргументе.

JsonSerializer.Deserialize(text, typeof(object));
...