簡體   English   中英

AutoMapper為什么不映射這些嵌套的集合?

[英]Why doesn't AutoMapper map these nested collections?

我在VB中具有以下源類。

Public Class Product
...

    Public Property itemizedSize As Size()
        Get
            Return _arrItemizedSizes
        End Get
        Set(ByVal value As Size())
            _arrItemizedSizes = value
        End Set
    End Property
...
End Class


Public Class Size
    Private _strName As String
    Private _intQuantity As Integer
    Private _intScale As Integer

    Public Property name() As String
        Get
            Return _strName
        End Get
        Set(ByVal value As String)
            _strName = value
        End Set
    End Property

    Public Property quantity() As Integer
        Get
            Return _intQuantity
        End Get
        Set(ByVal value As Integer)
            _intQuantity = value
        End Set
    End Property

    Public Property Scale() As Integer
        Get
            Return _intScale
        End Get
        Set(ByVal value As Integer)
            _intScale = value
        End Set
    End Property

    Public Sub New()
        _strName = ""
        _intQuantity = 0
        _intScale = 0
    End Sub

    Public Sub New(ByVal name As String, ByVal quantity As Integer, Optional ByVal Scale As Integer = 0)
        _strName = name
        _intQuantity = quantity
        _intScale = Scale
    End Sub
End Class

我正在嘗試將其映射到這些C#類

public class ProductsViewModel : List<ProductViewModel>
{
    ...
}

public class ProductViewModel
{
    ...
    public SizeViewModel[] ItemizedSize { get; set; }
    ...
}

public class SizeViewModel
{
    public string Name { get; set; }
    public int Quantity { get; set; }
}

我正在使用以下代碼進行映射...但是,我收到一個異常,說未定義從Size到SizeViewModel的映射

AutoMapper.Mapper.CreateMap<Size, SizeViewModel>();
AutoMapper.Mapper.CreateMap<Product, ProductViewModel>();

ProductsViewModel model = AutoMapper.Mapper.Map<List<Product>, ProductsViewModel>(productDetails);
AutoMapper.Mapper.AssertConfigurationIsValid();

有什么我想念的嗎? 任何幫助將不勝感激..謝謝!

我只運行了您的代碼,一切對我來說都很完美。 您正在使用哪個版本的AutoMapper? 我正在使用2.0.0.0版。

這里是我的VB代碼:

Public Class Product


    Public Property itemizedSize As Size()
        Get
            Return _arrItemizedSizes
        End Get
        Set(ByVal value As Size())
            _arrItemizedSizes = value
        End Set
    End Property

    Private Property _arrItemizedSizes As Size()

End Class


Public Class Size
    Private _strName As String
    Private _intQuantity As Integer
    Private _intScale As Integer

    Public Property name() As String
        Get
            Return _strName
        End Get
        Set(ByVal value As String)
            _strName = value
        End Set
    End Property

    Public Property quantity() As Integer
        Get
            Return _intQuantity
        End Get
        Set(ByVal value As Integer)
            _intQuantity = value
        End Set
    End Property

    Public Property Scale() As Integer
        Get
            Return _intScale
        End Get
        Set(ByVal value As Integer)
            _intScale = value
        End Set
    End Property

    Public Sub New()
        _strName = ""
        _intQuantity = 0
        _intScale = 0
    End Sub

    Public Sub New(ByVal name As String, ByVal quantity As Integer, Optional ByVal Scale As Integer = 0)
        _strName = name
        _intQuantity = quantity
        _intScale = Scale
    End Sub
End Class

這是C#:

using System;
using System.Collections.Generic;
using SimpleLib;  //That is the VB assembly

namespace ConsoleApplication1
{
    public class ProductsViewModel : List<ProductViewModel>
    {

    }

    public class ProductViewModel
    {
        public SizeViewModel[] ItemizedSize { get; set; }
    }

    public class SizeViewModel
    {
        public string Name { get; set; }
        public int Quantity { get; set; }

        public override string ToString()
        {
            return this.Name + " " + this.Quantity.ToString();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            AutoMapper.Mapper.CreateMap<Size, SizeViewModel>();
            AutoMapper.Mapper.CreateMap<Product, ProductViewModel>();

            List<Product> productDetails = new List<Product>()
                                               {
                                                   new Product() {itemizedSize = new Size[1] {new Size("hello", 2, 5)}},
                                                   new Product() {itemizedSize = new Size[1] {new Size("hello2", 4, 10)}}
                                               };

            ProductsViewModel model = AutoMapper.Mapper.Map<List<Product>, ProductsViewModel>(productDetails);
            AutoMapper.Mapper.AssertConfigurationIsValid();

            Console.WriteLine("Count: {0}", model.Count);
            Console.WriteLine("First Product: {0}", model[0].ItemizedSize[0].ToString());
            Console.WriteLine("Second Product: {0}", model[1].ItemizedSize[0].ToString());

            Console.ReadLine();
        }
    }
}

如您所見,我正在使用控制台應用程序對其進行測試。 我正確地獲得了所有映射,並且AutoMapper沒有配置錯誤。

這是我得到的輸出:

Count: 2
First Product: hello 2
Second Product: hello2 4

暫無
暫無

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

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