Igo*_*ejc 10 c# xsd xsd.exe automapper
我有一堆XSD.exe生成的数据协定类,所有可选元素都有一对C#属性
int Amount {get; set;}
bool isAmountSpecified {get; set;}
Run Code Online (Sandbox Code Playgroud)
在映射竞技场的另一边,我有一个可以为空的int
int? Amount {get; set;}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望AutoMapper能够识别这些模式并知道如何在两个方向上映射事物,而不必为每个单独的属性指定映射.这可能吗?
老实说,我不知道 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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |