Csharp/C#教程:接口和抽象类中的Xml属性分享


接口和抽象类中的Xml属性

我今天发现了一些困扰我的东西:

1.如果我有这个:

public interface INamed { [XmlAttribute] string Name { get; set; } } public class Named : INamed { public string Name { get; set; } } 

它提供以下输出(Name属性序列化为元素):

  Johan  

2.如果我有这个:

 public abstract class NamedBase { [XmlAttribute] public abstract string Name { get; set; } } public class NamedDerived : NamedBase { public override string Name { get; set; } } 

XmlSerializer抛出System.InvalidOperationException

成员’NamedDerived.Name’隐藏inheritance的成员’NamedBase.Name’,但具有不同的自定义属性。

我用于序列化的代码:

 [TestFixture] public class XmlAttributeTest { [Test] public void SerializeTest() { var named = new NamedDerived {Name = "Johan"}; var xmlSerializer = new XmlSerializer(named.GetType()); var stringBuilder = new StringBuilder(); using (var stringWriter = new StringWriter(stringBuilder)) { xmlSerializer.Serialize(stringWriter, named); } Console.WriteLine(stringBuilder.ToString()); } } 

我的问题是:

我做错了,如果是这样,在接口和抽象类中使用xml属性的正确方法是什么?

属性不会在重写属性上inheritance。 你需要重新声明它们。 同样在第一个示例中,当您在接口级别声明XmlAttribute并且序列化的xml包含值作为元素时,行为不是“预期的”行为。 因此,界面中的属性将被忽略,只有从实际类中获取的信息才会起作用。

我认为你应该xmlignore你的抽象类属性

上述就是C#学习教程:接口和抽象类中的Xml属性分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public abstract class NamedBase { [XmlIgnore] public abstract string Name { get; set; } } public class NamedDerived : NamedBase { [XmlAttribute] public override string Name { get; set; } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1028341.html

(0)
上一篇 2022年1月10日
下一篇 2022年1月10日

精彩推荐