Oyv*_*ind 6 .net c# xml-serialization factory-pattern xmlserializer
我正在尝试序列化/反序列化具有工厂创建的成员的对象.例如,假设有一个类型的成员Foo,它使用FooFactory.CreateFoo(int bar)进行实例化.
我目前的想法是
1.创建自定义XmlReader(例如,从XmlTextReader派生),并将工厂附加到它
2.Implement IXmlSerializable
3.在ReadXml()中,我可以从读者手中抢到工厂.
不确定这是否是最优雅的方式,是否有人做过类似的尝试?
XmlSerializer根本就没有为此设置.我强烈建议,如果你想用XmlSerializer,你最好的选择将是您的数据映射到一个简单的DTO模式第一,和序列化那个.在编写代码时从DTO回你的模型,加上工厂创建有,在常规代码.DTO模型应该简单; 简单到足以XmlSerializer让它满意.
是的,实施IXmlSerializable是一个选项,但是:该API是非常难以得到100%正确的(处理所有的各种方式的XML可以出现的话).我发现API非常难,我做了很多序列化.我谦卑地提出,编写几行代码从主模型映射到DTO模型比尝试实现要强大得多(并且快得多)IXmlSerializable.
例如,您可以:
[XmlRoot("foo")]
public class FooDTO {
[XmlAttribute("bar")]
public int Bar {get;set;}
public static implicit operator Foo(FooDTO value)
{
return value == null ? null : FooFactory.Create(value.Bar);
}
public static implicit operator FooDTO(Foo value)
{
return value == null ? null : new FooDTO { Bar = value.Bar; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地转换Foo为FooDTO:
Foo foo = ...
FooDTO dto = foo;
Run Code Online (Sandbox Code Playgroud)