我需要序列化项目中的复杂对象并将它们放入数据库中。我想使用 XML 序列化它们,以便更轻松地调试我的应用程序。
我的情况与这篇文章中描述的非常相似:http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx
所以我有一个包含属性的对象,该属性的类型由接口定义。然后我有不同的具体类型来实现它。
按照文章的方法,使用XmlInclude
属性,我获得了一个强耦合的解决方案,但我的应用程序被构造为使用插件方法,因此我可以根据需要对接口进行多种实现。
有没有办法使用 xml 序列化来解决我的问题,或者我必须使用二进制序列化?
如果您想使用 XmlSerializer,您需要有一个基类,而不是一个接口。
XmlIninclude 只是告诉序列化器可能的实现的一种方法。
另一种方法是将包含的类型实际传递到序列化器中。
只需枚举应用程序中从基类派生的所有类型(使用反射),并将它们作为已知类型的数组传递到序列化器中:
var serializer = new XmlSerializer(myBaseType, arrayOfConcreteImplementations);
与使用 DataContractSerializer 完全相同:第二个参数是可以使用反射找到的已知类型的集合),但是使用它您可以支持接口...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)