定义
命名空间:
程序集:
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}");
}
方法
版权声明:本文为huxyc原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。