簡體   English   中英

C# Automapper:可為空 Boolean 不適用於不同的成員名稱 Class

[英]C# Automapper: Nullable Boolean Not working for different Class member names

Automapper 未在兩個具有不同名稱的 boolean 可為 null 的成員之間正確映射。 這總是在目標中產生 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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM