C# Automapper:Nullable Boolean 不适用于不同的 Class 成员名称
C# Automapper: Nullable Boolean Not working for different Class member names
Automapper 无法在两个具有不同名称的可为空的布尔成员之间正确映射。
这始终会导致目标中为 Null。如何解决?
CreateMap<{Product, ProductDto>()
.ForMember(dest => dest.ProductStatus, opt => opt.MapFrom(src => src.Status))
.ReverseMap();
被这样称呼,
var productList = _mapper.Map<IEnumerable<ProductDto>, IEnumerable<Product>>(productDtoList);
public class ProductDto
{
public int ProductId{ get; set; }
public string ProductName{ get; set; }
public bool? ProductStatus { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool? Status { get; set; }
}
更新:当我将 ProductDto 和 Product 都命名为 Status
而不是 ProductDto
上的 ProductStatus
时,它似乎工作正常
目前正在使用 Net Core 3.1
我创建了一个快速控制台应用程序,一切都按预期工作,所以我不确定问题出在哪里。确保您的配置确实应用于您的 _mapper
。我只能猜测这可能是问题所在。
class Program
{
static void Main(string[] args)
{
var configuration = new MapperConfiguration(cfg => cfg
.CreateMap<Product, ProductDto>()
.ForMember(dest => dest.ProductStatus, opt => opt.MapFrom(src => src.Status))
.ReverseMap()
);
var mapper = new Mapper(configuration);
var productDtoList = new List<ProductDto>
{
new ProductDto { ProductId = 0, ProductName = "Product 1", ProductStatus = false },
new ProductDto { ProductId = 1, ProductName = "Product 2", ProductStatus = true },
new ProductDto { ProductId = 2, ProductName = "Product 3", ProductStatus = null },
};
var productList = mapper.Map<List<Product>>(productDtoList);
foreach(var product in productList)
{
Console.WriteLine($"{product.ProductId}\t{product.ProductName}\t{product.Status}");
// Output
// 0 Product 1 False
// 1 Product 2 True
// 2 Product 3
}
}
}
public class ProductDto
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool? ProductStatus { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool? Status { get; set; }
}
Automapper 无法在两个具有不同名称的可为空的布尔成员之间正确映射。 这始终会导致目标中为 Null。如何解决?
CreateMap<{Product, ProductDto>()
.ForMember(dest => dest.ProductStatus, opt => opt.MapFrom(src => src.Status))
.ReverseMap();
被这样称呼,
var productList = _mapper.Map<IEnumerable<ProductDto>, IEnumerable<Product>>(productDtoList);
public class ProductDto
{
public int ProductId{ get; set; }
public string ProductName{ get; set; }
public bool? ProductStatus { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool? Status { get; set; }
}
更新:当我将 ProductDto 和 Product 都命名为 Status
而不是 ProductDto
ProductStatus
时,它似乎工作正常
目前正在使用 Net Core 3.1
我创建了一个快速控制台应用程序,一切都按预期工作,所以我不确定问题出在哪里。确保您的配置确实应用于您的 _mapper
。我只能猜测这可能是问题所在。
class Program
{
static void Main(string[] args)
{
var configuration = new MapperConfiguration(cfg => cfg
.CreateMap<Product, ProductDto>()
.ForMember(dest => dest.ProductStatus, opt => opt.MapFrom(src => src.Status))
.ReverseMap()
);
var mapper = new Mapper(configuration);
var productDtoList = new List<ProductDto>
{
new ProductDto { ProductId = 0, ProductName = "Product 1", ProductStatus = false },
new ProductDto { ProductId = 1, ProductName = "Product 2", ProductStatus = true },
new ProductDto { ProductId = 2, ProductName = "Product 3", ProductStatus = null },
};
var productList = mapper.Map<List<Product>>(productDtoList);
foreach(var product in productList)
{
Console.WriteLine($"{product.ProductId}\t{product.ProductName}\t{product.Status}");
// Output
// 0 Product 1 False
// 1 Product 2 True
// 2 Product 3
}
}
}
public class ProductDto
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool? ProductStatus { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool? Status { get; set; }
}