如何将 json 响应映射到具有不同字段名称的模型

How to map json response to the model with different field names

我正在使用 ASP.NET Core 6 和 System.Text.Json 库。

例如,我收到一些 API 的回复,结构如下

{
   "items": 
   [
       {
          "A": 1,
          "User": 
          {
             "Name": "John",
             "Age": 21,
             "Adress": "some str"
          },
       },
       {
          "A": 2,
          "User": 
          {
             "Name": "Alex",
             "Age": 22,
             "Adress": "some str2"
          },
       }
   ]
}

而且我想将此响应写到 List<SomeEntity> 之类的模型,其中 SomeEntity

    public class SomeEntity
    {
        public int MyA { get; set; } // map to A
        public User MyUser { get; set; } // map to User
    }

    public class User
    {
        public string Name { get; set; }
        public string MyAge { get; set; } // map to Age
    }

我该怎么做?

更新:

是否可以映射嵌套属性?

    public class SomeEntity
    {
        // should I add an attribute [JsonPropertyName("User:Name")] ?
        public string UserName{ get; set; } // map to User.Name
    }

使用 JsonPropertyName 属性

public class Model
{
    [JsonPropertyName("items")]
    public SomeEntity[] Items { get; set; }
}    
        
public class SomeEntity
{
    [JsonPropertyName("A")]
    public int MyA { get; set; } // map to A
    [JsonPropertyName("User")]
    public User MyUser { get; set; } // map to User
}
        
public class User
{
    public string Name { get; set; }
    [JsonPropertyName("Age")]
    public string MyAge { get; set; } // map to Age
}

然后你可以用

之类的东西反序列化它
JsonSerializer.Deserialize<Model>(response);

请试试这个

[JsonConverter(typeof(JsonPathConverter))]
   public class SomeEntity
    {
        [JsonProperty("items.User.Name")]
        public string UserName{ get; set; } // map to User.Name
    }

反序列化使用:


JsonSerializer.Deserialize<SomeEntity>(response);