Я пытаюсь отобразить класс, который имеет идентичный макет для класса, к которому я пытаюсь перейти. Все идет хорошо, за исключением случаев, когда я пытаюсь сопоставить коллекции объектов. Например, когда я пытаюсь отобразить это свойство, определенное в классе Источник:Коллекции объектов AutoMapper, которые не отображаются
[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; }
}
я считаю, что это не карта, но остается в том же пространстве имен исходного объекта, даже если он является сбор в объекте назначения.
Интересно, есть ли у вас какие-либо идеи по этому вопросу?
EDIT: Более подробная информация в виде примера - источник класса:
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);
}
}
Затем я создаю свой объект person из Namesp ACE1 и создать отображения с помощью функции выше, как так:
CreateMappings("Namespace1", "Namespace2", typeof(Namespace1.Person));
После этого я вызываю функцию карты следующим образом:
var result = Mapper.Map<Namespace2.Person>(person);
Это отображает все свойства класса Person просто отлично за исключением Элемент массива объектов. Он передает объекты, но они все еще принадлежат к Namespace1 вместо пространства имен Namespace2.
Изображение проблемы из окна часов можно найти here
Вы можете загрузить приложение консоли, если вам нравится here
Спасибо за любую помощь вы можете дать. M
Я проверил и сообщит вам. – daryal
Привет, спасибо, что посмотрели на это. Я думаю, что ключевое различие состоит в том, что два типа относятся к разным пространствам имен. Таким образом, я обнаружил, что они не сопоставляются по отношению к пространству имен объектов назначения, когда (и только когда) участвует коллекция объектов. Я собрал простой пример в [link] (http://109.228.27.61/Test/objectcollectionmappings.zip), который, надеюсь, проиллюстрирует это - это консольное приложение с двумя отдельными определениями классов. Он показывает, что я сопоставляю различные типы внутри двух объектов, и я делаю это динамически. Спасибо за любую дальнейшую помощь, которую вы можете дать. M – Michael
См. Мое обновленное объяснение проблемы выше. Еще раз спасибо за любую помощь. M – Michael