如何在使用自动映射器时将属性名称的 jsonproperty 设置为 dto?

Posted

技术标签:

【中文标题】如何在使用自动映射器时将属性名称的 jsonproperty 设置为 dto?【英文标题】:how to set the jsonproperty for property names to the dto while using automapper? 【发布时间】:2020-12-05 06:06:42 【问题描述】:

在我的 API 中,我使用 automapper 映射到模型,它可以很好地将实体映射到模型,但我想将 PropertyNames 添加到模型中。我使用了 Json.net 的 JsonProperty,但这不是例外。

下面是DTO类

public class StudentModel

[JsonProperty("Admission Number")] public string StudentId  get; set; 
[JsonProperty("Date of Birth")] public string DOB  get; set; 
[JsonProperty("Name")] public string StudentName  get; set; 

下面是实体类

public class StudentEntity

public string StudentId  get; set; 
public DateTime DOB  get; set; 
public string StudentName  get; set; 

这样的映射mappingProfile.CreateMap<StudentEntity, StudentModel>() 映射器是:_mapper.Map<StudentEntity, StudentModel>(entity)).ToList();

但我没有在响应中获得 JSON 属性

这样的输出


"studentId": "30112020",
"dOB": "01-01-2020 12:00 AM",
"studentName": "rom"

但我想变成这样


"Admission Number": "30112020",
"Date of Birth": "01-01-2020 12:00 AM",
"Name": "rom"

【问题讨论】:

你确定你使用的是json.net吗? ASP.NET Core 3.0 及更高版本使用不同的序列化程序system.text.json。见Migrate from ASP.NET Core 2.2 to 3.0: Newtonsoft.Json (Json.NET) support 和Where did IMvcBuilder AddJsonOptions go in .Net Core 3.0?。 system.text.json 使用不同的属性来控制序列化的属性名称,JsonPropertyNameAttribute。见Converting newtonsoft code to System.Text.Json in .net core 3. what's equivalent of JObject.Parse and JsonProperty。 如果您确定您使用的是 Json.NET,minimal reproducible example 指定您的 asp.net-core 版本以及生成输出 JSON 的方式将增加我们为您提供帮助的机会。 @dbc 感谢它的响应,当给出 JsonPropertName 而不是 JsonProperty 时 【参考方案1】:

在听了 dbc 的评论之后,它起作用了

public class ResponseJson

    [JsonPropertyName("StudentId")]
    public string StudentId  get; set; 
    [JsonPropertyName("dob")]
    public string DOB  get; set; 
    [JsonPropertyName("StudentName ")]
    public string StudentName  get; set; 

而不是

public class StudentModel

[JsonProperty("Admission Number")] public string StudentId  get; set; 
[JsonProperty("Date of Birth")] public string DOB  get; set; 
[JsonProperty("Name")] public string StudentName  get; set; 

【讨论】:

以上是关于如何在使用自动映射器时将属性名称的 jsonproperty 设置为 dto?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用自动映射器映射内部导航属性。 EF 核心

自动映射器。来自 json 的映射属性

使用自动映射器设置属性值以与其他 2 个组合

自定义对象映射器 bean 更改打开 Feign 客户端的默认属性/自动配置的 objectMapper bean

如何使用杰克逊映射器自动识别不同的类型

对象引用未设置为对象实例的自动映射器问题