Automapper - 嵌套为子项时忽略属性
Automapper - ignore properties when nested as a child
我定义了两个简单的 DTO,我将传递给 automapper v10.0.0
class RequestDTO {
public int Id { get; set; }
// other properties
public IEnumerable<AssetDTO> Assets { get; set; }
}
class AssetDTO {
public int RequestId { get; set; }
// other properties
}
当我映射资产时,它应该显示 RequestId
。那工作正常。但是,当我映射 RequestDTO
时,没有理由让每个资产都包含 RequestId
,因为 Id
已经通过 RequestDTO
.
包含了
有没有一种简单的方法可以在 RequestId
由于父请求被映射而被映射时忽略它?
所以如果我只是映射资产,我想要
{
"RequestId": 12,
"OtherProperty": ""
}
但是如果我正在映射一个请求,我想要:
{
"Id": 12,
"Assets": [
{
"OtherProperty", ""
}
]
}
这与映射无关,而是与数据对象的形状有关。 AssetDTO
是一个 class,它 有 RequestId
属性 定义。因此,您不能只期望创建一个 AssetDTO
对象而 没有 RequestId
属性 在其中。
即使您试图在映射过程中忽略它,您最终也会得到 RequestId
的值为 0(int
类型的默认值)。
DTO 的主要目的是根据需要创建不同形状的数据对象,创建大量 DTO 以从单一模型类型进行映射是相当普遍的。因此,您的问题的解决方案是使用两个不同的 DTO 在两种不同的情况下映射 Asset
类型 -
class ChildAssetDTO
{
// other properties // no RequestId in this class
}
class AssetDTO : ChildAssetDTO
{
public int RequestId { get; set; } // only the RequestId in this class
}
class RequestDTO
{
public int Id { get; set; }
// other properties
public IEnumerable<ChildAssetDTO> Assets { get; set; }
}
现在您可以使用 AssetDTO
映射 Asset
类型,使用 AssetChildDTO
映射 Request
类型。
我定义了两个简单的 DTO,我将传递给 automapper v10.0.0
class RequestDTO {
public int Id { get; set; }
// other properties
public IEnumerable<AssetDTO> Assets { get; set; }
}
class AssetDTO {
public int RequestId { get; set; }
// other properties
}
当我映射资产时,它应该显示 RequestId
。那工作正常。但是,当我映射 RequestDTO
时,没有理由让每个资产都包含 RequestId
,因为 Id
已经通过 RequestDTO
.
有没有一种简单的方法可以在 RequestId
由于父请求被映射而被映射时忽略它?
所以如果我只是映射资产,我想要
{
"RequestId": 12,
"OtherProperty": ""
}
但是如果我正在映射一个请求,我想要:
{
"Id": 12,
"Assets": [
{
"OtherProperty", ""
}
]
}
这与映射无关,而是与数据对象的形状有关。 AssetDTO
是一个 class,它 有 RequestId
属性 定义。因此,您不能只期望创建一个 AssetDTO
对象而 没有 RequestId
属性 在其中。
即使您试图在映射过程中忽略它,您最终也会得到 RequestId
的值为 0(int
类型的默认值)。
DTO 的主要目的是根据需要创建不同形状的数据对象,创建大量 DTO 以从单一模型类型进行映射是相当普遍的。因此,您的问题的解决方案是使用两个不同的 DTO 在两种不同的情况下映射 Asset
类型 -
class ChildAssetDTO
{
// other properties // no RequestId in this class
}
class AssetDTO : ChildAssetDTO
{
public int RequestId { get; set; } // only the RequestId in this class
}
class RequestDTO
{
public int Id { get; set; }
// other properties
public IEnumerable<ChildAssetDTO> Assets { get; set; }
}
现在您可以使用 AssetDTO
映射 Asset
类型,使用 AssetChildDTO
映射 Request
类型。