JsonSerializer 类

  • Post author:
  • Post category:其他

定义

命名空间:

System.Text.Json

程序集:

System.Text.Json.dll

提供将对象或值类型序列化为 JSON 以及将 JSON 反序列化为对象或值类型的功能。

public static class JsonSerializer

继承  Object —》  JsonSerializer

我踩过的坑

public class User
{
    public int Id { get; set; }
}

static void Main(string[] args)
{
    int id = 9;
    string str = "{\"id\": " + id + "}";
    var u = JsonSerializer.Deserialize<User>(str);
    Console.WriteLine($"User ID: {u.Id}, Correct: {id == u.Id}");  // always 0/init/default value
}
  
            

            
            

解决办法

static void Main(string[] args)
{
    int id = 9;
    string str = "{\"id\": " + id + "}";

    var u = JsonSerializer.Deserialize<User>(str);
    Console.WriteLine($"User ID: {u.Id}, Correct: {id == u.Id}");  // always 0/init/default value

    var options = new JsonSerializerOptions
    {
        PropertyNameCaseInsensitive = true,
    };
    u = JsonSerializer.Deserialize<User>(str);
    Console.WriteLine($"User ID: {u.Id}, Correct: {id == u.Id}");
}      
  
            

 

但是,如果是多个字段都不需要这个参数。

static void Main(string[] args)
{
            
            int id = 9;
            string str = "{\"id\": " + id + "}";

            var u = JsonSerializer.Deserialize<User>(str);
            Console.WriteLine($"User ID: {u.Id}, Correct: {id == u.Id}");  // always 0/init/default value

     var options = new JsonSerializerOptions
     {
           PropertyNameCaseInsensitive = true,
     };
     u = JsonSerializer.Deserialize<User>(str,options);
     Console.WriteLine($"User ID: {u.Id}, Correct: {id == u.Id}");


     str = "{\"code\":\"200\",\"updateTime\":\"2022 - 01 - 25T16: 42 + 08:00\",\"fxLink\":\"http://hfx.link/1tjo1\"," +
                "\"now\":{\"obsTime\":\"2022-01-25T16:33+08:00\",\"temp\":\"5\",\"feelsLike\":\"0\",\"icon\":\"100\",\"text\":\"晴\",\"wind360\":\"315\"," +
                "\"windDir\":\"西北风\",\"windScale\":\"3\",\"windSpeed\":\"14\",\"humidity\":\"21\",\"precip\":\"0.0\",\"pressure\":\"1020\",\"vis\":\"30\"," +
                "\"cloud\":\"0\",\"dew\":\"-17\"},\"refer\":{\"sources\":[\"QWeather\",\"NMC\",\"ECMWF\"],\"license\":[\"no commercial use\"]}}";
     var wn = JsonSerializer.Deserialize<weathernow>(str);
     Console.WriteLine($"httpcode:{ wn.code },updateTime:{ wn.updateTime}");
}

 

 

方法

方法
Deserialize(ReadOnlySpan<Byte>, Type, JsonSerializerOptions)

将表示单个 JSON 值的 UTF-8 编码文本分析为指定类型的实例。

Deserialize(String, Type, JsonSerializerOptions)

将表示单个 JSON 值的文本分析为指定类型的实例。

Deserialize(Utf8JsonReader, Type, JsonSerializerOptions)

从提供的读取器读取一个 JSON 值(包括对象或数组)并将它转换为指定类型的实例。

Deserialize<TValue>(ReadOnlySpan<Byte>, JsonSerializerOptions)

将表示单个 JSON 值的 UTF-8 编码文本分析为泛型类型参数指定的类型的实例。

Deserialize<TValue>(String, JsonSerializerOptions)

将表示单个 JSON 值的文本分析为泛型类型参数指定的类型的实例。

Deserialize<TValue>(Utf8JsonReader, JsonSerializerOptions)

将一个 JSON 值(包括对象或数组)从提供的读取器读取到泛型类型参数指定的类型的实例中。

DeserializeAsync(Stream, Type, JsonSerializerOptions, CancellationToken)

将表示单个 JSON 值的 UTF-8 编码文本异步读取到指定类型的实例中。 流会被完整读取。

DeserializeAsync<TValue>(Stream, JsonSerializerOptions, CancellationToken)

将表示单个 JSON 值的 UTF-8 编码文本异步读取到泛型类型参数指定的类型的实例中。 流会被完整读取。

Serialize(Object, Type, JsonSerializerOptions)

将指定类型的值转换为 JSON 字符串。

Serialize(Utf8JsonWriter, Object, Type, JsonSerializerOptions)

将指定类型的 JSON 表示形式写入提供的编写器。

Serialize<TValue>(TValue, JsonSerializerOptions)

将泛型类型参数指定的类型的值转换为 JSON 字符串。

Serialize<TValue>(Utf8JsonWriter, TValue, JsonSerializerOptions)

将泛型类型参数指定的类型的 JSON 表示形式写入提供的编写器。

SerializeAsync(Stream, Object, Type, JsonSerializerOptions, CancellationToken)

将指定类型的值异步转换为 UTF-8 编码的 JSON 文本并将它写入指定流。

SerializeAsync<TValue>(Stream, TValue, JsonSerializerOptions, CancellationToken)

将泛型类型参数指定的类型的值异步转换为 UTF-8 编码的 JSON 文本并将它写入流。

SerializeToUtf8Bytes(Object, Type, JsonSerializerOptions)

将指定类型的值转换为编码为 UTF-8 字节的 JSON 字符串。

SerializeToUtf8Bytes<TValue>(TValue, JsonSerializerOptions)

将泛型类型参数指定的类型的值转换为编码为 UTF-8 字节的 JSON 字符串。


版权声明:本文为huxyc原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。