序列化对象时如何忽略 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);

我不确定这是否可以优雅地考虑。