10

すべてのオプション要素に対して、次のような C# プロパティのペアを持つ XSD.exe 生成のデータ コントラクト クラスが多数あります。

int Amount {get; set;}
bool isAmountSpecified {get; set;}

マッピングアリーナの反対側には、nullable int のようなものがあります

int? Amount {get; set;}

理想的には、AutoMapper がそのようなパターンを認識し、個々のプロパティごとにマッピングを指定することなく、双方向に物事をマッピングする方法を認識できるようにしたいと考えています。これは可能ですか?

4

3 に答える 3

2

OK、昨日、AutoMapper の作者である Jimmy Bogard と簡単な話し合いをしましたが、基本的に私が探しているものは現在不可能です。そのような規則のサポートは、将来的に実装される予定です (私が彼を正しく理解していれば:))。

于 2010-03-10T06:24:47.097 に答える
1

AutoMapper がそれを行うかどうかは正直わかりませんが (私は AutoMapper をあまり使用しないため)、protobuf-net がこれらのパターンを両方サポートしていることはわかっているので、それらを切り替えるために使用できますSerializer.ChangeType<,>(obj)

ただし、現在のバージョンは、メンバーの属性 ( など[XmlElement(Order = n)]) に大きく依存しています。それが問題を引き起こすかどうかはわかりません。進行中のバージョンはバニラ タイプ (属性なし) をサポートしていますが、それはまだ完全ではありません (すぐに)。

例:

[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);
    }
}
于 2010-03-09T12:20:36.037 に答える