【发布时间】:2019-01-10 07:00:21
【问题描述】:
我正在尝试将具有相同布局的类映射到我要映射到的类。一切顺利,除非我尝试映射对象集合。例如,当我尝试映射源类中定义的这个属性时:
[System.Xml.Serialization.XmlElementAttribute("trust", typeof(Trust))]
[System.Xml.Serialization.XmlElementAttribute("valuation", typeof(Valuation))]
[System.Xml.Serialization.XmlElementAttribute("waiver_of_premium_ind", typeof(YesNo))]
[System.Xml.Serialization.XmlElementAttribute("written_under_trust_ind", typeof(YesNo), IsNullable = true)]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
public object[] Items
{
get { return this.itemsField; }
set { this.itemsField = value; }
}
我发现它没有映射,而是保留在与源对象相同的命名空间中,即使它是目标对象中的一个集合。
不知道你对这件事有什么想法吗?
编辑: 通过示例获得更多信息 - 源类:
namespace Namespace1
{
public class Person
{
public int PersonID { get; set; }
public List<Arm> Arms { get; set; }
[System.Xml.Serialization.XmlElementAttribute("_arms", typeof(Arm))]
[System.Xml.Serialization.XmlElementAttribute("_hand", typeof(Hand))]
public object[] Items { get; set; }
}
public class Arm
{
public Hand Hand { get; set; }
}
public class Hand
{
public int HandID { get; set; }
public string HandSide { get; set; }
public List<Fingers> Fingers { get; set; }
}
public class Fingers
{
public int FingerNumber { get; set; }
}
}
目标类别:
namespace Namespace2
{
public class Person
{
public int PersonID { get; set; }
public List<Arm> Arms { get; set; }
[System.Xml.Serialization.XmlElementAttribute("_arms", typeof(Arm))]
[System.Xml.Serialization.XmlElementAttribute("_hand", typeof(Hand))]
public object[] Items { get; set; }
}
public class Arm
{
public Hand Hand { get; set; }
}
public class Hand
{
public int HandID { get; set; }
public string HandSide { get; set; }
public List<Fingers> Fingers { get; set; }
}
public class Fingers
{
public int FingerNumber { get; set; }
}
}
映射两种类型和两个命名空间内所有嵌套类型的代码:
public static void CreateMappings(string nsFrom, string nsTo, Type typeFrom)
{
Assembly assembly = Assembly.GetAssembly(typeFrom);
var TypesInNamespace = assembly.GetTypes().Where(type => type.Namespace == nsFrom);
foreach (var sourceType in TypesInNamespace)
{
Type destinationType = Type.GetType(sourceType.FullName.Replace(nsFrom, nsTo));
Mapper.CreateMap(sourceType, destinationType);
}
}
然后我从 Namespace1 创建我的 person 对象并使用上面的函数创建映射,如下所示:
CreateMappings("Namespace1", "Namespace2", typeof(Namespace1.Person));
之后我像这样调用地图函数:
var result = Mapper.Map<Namespace2.Person>(person);
这很好地映射了 Person 类的所有属性,除了 Items 对象数组。它传输对象,但它们仍然属于 Namespace1 而不是 Namespace2 命名空间。
可以在监视窗口中找到问题的图像here
喜欢here的可以下载控制台应用
感谢您提供的任何帮助。 M
【问题讨论】:
标签: c# automapper