序列化对象时如何忽略 JsonPropertyNameAttribute 注解?
How to ignore JsonPropertyNameAttribute annotation when serialize object?
我想从使用不同命名策略的其他人 API 反序列化 JSON,所以我将 JsonPropertyNameAttribute
添加到 POCO
public class X
{
[JsonPropertyNameAttribute("uid")]
public string Name {get;set;}
}
它希望它被序列化为
{
"name" : xx,
.....
}
或
{
"Name" : xx,
.....
}
没有
{
"uid" : xx,
......
}
如何优雅地使用System.Text.Json
?
(除了创建像 X 一样没有注释的新 POCO)
在没有 JsonPropertyNameAttribute 的情况下定义模型
public class X
{
public string Name { get; set; }
}
创建 cutsom 策略
public class DeserializePolicy : JsonNamingPolicy
{
public override string ConvertName(string name)
=> name == "Name" ? "uid" : name;
}
用它反序列化
string text = "{\"uid\":\"abc\"}";
var options = new JsonSerializerOptions { PropertyNamingPolicy = new DeserializePolicy() };
var x = JsonSerializer.Deserialize<X>(text, options);
无政策序列化
var json = JsonSerializer.Serialize<X>(x);
我不确定这是否可以优雅地考虑。
我想从使用不同命名策略的其他人 API 反序列化 JSON,所以我将 JsonPropertyNameAttribute
添加到 POCO
public class X
{
[JsonPropertyNameAttribute("uid")]
public string Name {get;set;}
}
它希望它被序列化为
{
"name" : xx,
.....
}
或
{
"Name" : xx,
.....
}
没有
{
"uid" : xx,
......
}
如何优雅地使用System.Text.Json
?
(除了创建像 X 一样没有注释的新 POCO)
在没有 JsonPropertyNameAttribute 的情况下定义模型
public class X
{
public string Name { get; set; }
}
创建 cutsom 策略
public class DeserializePolicy : JsonNamingPolicy
{
public override string ConvertName(string name)
=> name == "Name" ? "uid" : name;
}
用它反序列化
string text = "{\"uid\":\"abc\"}";
var options = new JsonSerializerOptions { PropertyNamingPolicy = new DeserializePolicy() };
var x = JsonSerializer.Deserialize<X>(text, options);
无政策序列化
var json = JsonSerializer.Serialize<X>(x);
我不确定这是否可以优雅地考虑。