Как игнорировать аннотацию JsonPropertyNameAttribute при сериализации объекта? - PullRequest
0 голосов
/ 06 августа 2020

Я хочу десериализовать JSON из API других парней, который использует другую политику именования, поэтому я добавляю JsonPropertyNameAttribute в POCO

public class X
{
  [JsonPropertyNameAttribute("uid")]
  public string Name {get;set;}
}

и ожидал, что он будет сериализован в

{
  "name" : xx,
  .....
}

или

{ 
  "Name" : xx,
  .....
}

не

{
  "uid" : xx,
  ......
}

Как изящно сделать это с System.Text.Json? (кроме создания нового POCO, такого как X, без аннотации)

1 Ответ

2 голосов
/ 06 августа 2020

Определите модель без атрибута JsonPropertyNameAttribute

public class X
{
    public string Name { get; set; }
}

Создайте политику сокращения

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);

Не уверен, что это можно считать изящным.

...