Honestamente, no tengo idea de si AutoMapper hará eso (ya que no uso mucho AutoMapper), pero sé que protobuf-net admite ambos patrones, por lo que podría usar Serializer.ChangeType<,>(obj)
para alternar entre ellos.
La versión actual es, sin embargo, bastante dependiente de tener atributos (como [XmlElement(Order = n)]
) en los miembros - No sé si eso causa un problema? La versión en progreso admite tipos simples (sin atributos), pero aún no está completa (pero pronto).
Ejemplo:
[XmlType]
public class Foo
{
[XmlElement(Order=1)]
public int? Value { get; set; }
}
[XmlType]
public class Bar
{
[XmlElement(Order = 1)]
public int Value { get; set; }
[XmlIgnore]
public bool ValueSpecified { get; set; }
}
static class Program
{
static void Main()
{
Foo foo = new Foo { Value = 123 };
Bar bar = Serializer.ChangeType<Foo, Bar>(foo);
Console.WriteLine("{0}, {1}", bar.Value, bar.ValueSpecified);
foo = new Foo { Value = null };
bar = Serializer.ChangeType<Foo, Bar>(foo);
Console.WriteLine("{0}, {1}", bar.Value, bar.ValueSpecified);
bar = new Bar { Value = 123, ValueSpecified = true };
foo = Serializer.ChangeType<Bar, Foo>(bar);
Console.WriteLine(foo.Value);
bar = new Bar { Value = 123, ValueSpecified = false };
foo = Serializer.ChangeType<Bar, Foo>(bar);
Console.WriteLine(foo.Value);
}
}
Creo que esto podría ayudar http://valueinjecter.codeplex.com/documentation, solo tiene que especificar un algoritmo de asignación para int a int? una vez y usarlo para cualquier objeto que necesite, no tiene que crear mapas para cada par de tipos – Omu