我在将c#类序列化为具有基类的
XML文件时出现问题…这是一个简单的示例:
namespace Domain { [Serializable] public class ClassA { public virtual int MyProperty { get; set; } } } namespace Derived { public class ClassA : Domain.ClassA { public override int MyProperty { get { return 1; } set { /* Do nothing */ } } } }
当我尝试序列化Derived.ClassA的实例时,我收到以下异常:
InvalidOperationException(Types’Domain.ClassA’和’Derived.ClassA’都使用XML类型名称’ClassA’,来自命名空间“.使用XML属性为该类型指定唯一的XML名称和/或命名空间.)
问题是我想创建一个简单定义XML文件结构的基类,然后允许其他任何人从该类派生以插入业务规则,但格式化将来自基础.
这是可能的,如果是这样,我如何归属基类来允许这个?
解决方法
如果您可以将派生类重命名为与其基类不同的内容,则可以使用
XmlAttributeOverrides
执行此操作:
// For ClassB,which derives from ClassA XmlAttributes attributes = new XmlAttributes(); attributes.XmlRoot = new XmlRootAttribute("ClassA"); XmlAttributeOverrides overrides = new XmlAttributeOverrides(); overrides.Add(typeof(ClassB),attributes); XmlSerializer serializer = new XmlSerializer(typeof(ClassB),overrides);
这将序列化为< ClassA> …< / ClassA>并可以从那序列化为ClassB实例.
据我所知,当基类和派生类具有相同的名称时(除了通过Data Contract Surrogates或其他一些过度杀伤方法完全控制序列化过程之外),没有办法做到这一点.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。