Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不带[XMLInclude]或类型[]构造函数的抽象类的序列化_C#_Xml_Serialization - Fatal编程技术网

C# 不带[XMLInclude]或类型[]构造函数的抽象类的序列化

C# 不带[XMLInclude]或类型[]构造函数的抽象类的序列化,c#,xml,serialization,C#,Xml,Serialization,我不确定这是否可行,但基本上我在NameSpace1[assembly1]中有一个抽象类,在Namespace2[assembly2]中有一个派生类。命名空间1[assembly1]被命名空间2[assembly2]引用 现在,我想在从assembly3[仅引用assembly1]创建派生类的对象之后序列化抽象类 我在谷歌上搜索发现,我需要指定[XMLInclude]属性,或者在XMLSerializer构造函数中以ExtraTypes的形式提供类型。我的项目的当前结构不允许我实现这一点,没有这

我不确定这是否可行,但基本上我在NameSpace1[assembly1]中有一个抽象类,在Namespace2[assembly2]中有一个派生类。命名空间1[assembly1]被命名空间2[assembly2]引用

现在,我想在从assembly3[仅引用assembly1]创建派生类的对象之后序列化抽象类

我在谷歌上搜索发现,我需要指定[XMLInclude]属性,或者在XMLSerializer构造函数中以ExtraTypes的形式提供类型。我的项目的当前结构不允许我实现这一点,没有这两种方法中的任何一种可以实现序列化吗


谢谢

总的来说这是可能的

对于这个用例,您可以使用IXmlSerializable实现。在序列化时,您可以将对象的类型作为字符串写入xml以及对象、属性等


对于反序列化,您可以从xml读回类型并使用Activator.CreateInstance。。。重新创建类型。

好的实现IXmlSerializable对于这么多属性来说简直是疯了。讨厌这么说,但还有其他解决方案吗?@SparshGupta这取决于你必须序列化的类,以及你将来必须提供或不提供的兼容性。我更喜欢IXmlSerializable实现,因为对我来说,将来更容易扩展/维护和更改行为。感谢@user1341210,只是为了确保我需要在基类中实现IXmlSerializable,对吗?@SparshGupta是的,通常在基类中实现它。如果您需要序列化其他内容,您的真实对象类可以覆盖它,或者您可以创建一些可以选择性覆盖的虚拟写/读xml方法来扩展序列化行为。