我有这样的场景:XmlInclude到(反)序列继承类型在单独的程序集
namespace MyApp.Animals
{
public class Dog : MyApp.Categories.Canine
...
所以我想序列化/反序列化的狗类。不幸的是,我不能使用[XmlInclude]属性,因为通过将它添加到父类(MyApp.Categories.Canine),我需要添加对父类存在的程序集的引用(MyApp.Animals)..然而,由于继承,子类已经引用父类...所以我们有一个循环引用。
是否有任何实现此目的的最佳实践方式?我可以通过手动序列化/反序列化父类上存在的属性来解决这个问题,并且只是在子节点上进行序列化,但这不是很优雅。
盼望一些更好的技巧..
UPDATE:添加到例如响应下面约翰的评论...
我没有一个完整的代码示例(我用的工作代码大规模和复杂的),但问题是,应该去/从xml序列化的一些属性包含在父类中,该父类与子类不同。
将XmlElement属性添加到父类不起作用,因为我们实际上正在对子类进行de/serialization,因此它不会迭代到父级。而且我们不能在父对象上做,因为我们不能添加对孩子的引用(因为孩子已经在引用父对象),所以de/serialiser将不知道要对哪个孩子进行操作。
要增加复杂性的一个额外的水平,我与实际上被取消/序列化为更大的序列的一部分,由父对象的下列财产问题的对象:
[XmlElement("ShippingAddress")]
public Location ShippingAddress
{
get { return _shippingAddress; }
set { _shippingAddress = value; }
}
的问题在于这里的位置类型是子位置类型。因此,只有子类型的属性才会变为de/serialized ...父类型(也称为Location,但在不同的名称空间中)中的所有属性都不是。
这是否使它更清晰?
能否请你告诉代码和生成的XML?目前还不清楚为什么你需要'XmlInclude'。 – 2010-06-25 00:42:44
我已经更新了我原来的帖子.. – Jeeby 2010-06-25 01:42:26