Ich habe ehrlich gesagt keine Ahnung, ob AutoMapper das tun wird (da ich AutoMapper nicht viel benutze), aber ich weiß, dass protobuf-net beide diese Muster unterstützt, also könnten Sie Serializer.ChangeType<,>(obj)
verwenden, um zwischen ihnen zu wechseln.
Die aktuelle Version ist jedoch ziemlich abhängig von Attributen (wie [XmlElement(Order = n)]
) auf die Mitglieder - ich weiß nicht, ob das ein Problem verursacht? Die in Bearbeitung befindliche Version unterstützt Vanilla-Typen (ohne Attribute), aber das ist noch nicht abgeschlossen (aber bald).
Beispiel:
[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);
}
}
Ich denke, das könnte http://valueinjecter.codeplex.com/documentation helfen, müssen Sie nur einen Mapping-Algorithmus für int auf int? einmal und verwenden Sie es für welche Objekte Sie brauchen, müssen Sie nicht Karten für jedes Paar von Typen erstellen – Omu