[英]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.