c# - - - JsonSerializer.Deserialize失败


using System;


using System.Text.Json;



public class Program


{


 public static void Main()


 {


 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


 }


}



public class User {


 public int Id { get; set; }


}



为什么数据没有被正确反序列化到User对象?我还通过fiddle验证了行为,以防它是本地系统的问题,未引发异常。

时间:

你的问题是System.Text.Json默认是区分大小写的,因此"id": 9 (小写)不映射到Id属性,从文件

要更改该行为,请设置JsonSerializerOptions.PropertyNameCaseInsensitivetrue


var options = new JsonSerializerOptions


{


 PropertyNameCaseInsensitive = true,


};


var weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(jsonString, options);



你也需要这样做:


var u = JsonSerializer.Deserialize<User>(str, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });



演示fiddle #1 这里

可以在ASP.NET Core 3.0中启动时配置选项,如下所示在asp.net core 3,如何设置json序列化器设置:?


services.AddControllers().AddJsonOptions(options =>


{


 options.PropertyNameCaseInsensitive = true;


});



或者,你可以将[JsonPropertyName("id")]应用到你的模型:


public class User {


 [JsonPropertyName("id")]


 public int Id { get; set; }


}



演示fiddle #2 在这里

...