Csharp/C#教程:如何为List 实现设置XmlArrayItem元素名称?分享


如何为List 实现设置XmlArrayItem元素名称?

我想创建一个自定义XML结构,如下所示:

   

为了能够做到这一点,我创建了List的实现。 我的代码如下:

 [XmlRootAttribute(ElementName="Hotels")] public class HotelList: List 

因为List所持有的类不是名为Hotel而是HotelBasic我的xml就像

    

如何在不必实现ISerializableIEnumerable情况下解决这个问题?

假设您正在使用XmlSerializer ,如果您要做的只是更改HotelBasic类的序列化方式,您可以使用XmlTypeAttribute

 [XmlType(TypeName = "Hotel")] public class HotelBasic { public string Name { get; set; } } 

HotelList类一起使用时,它将被序列化为:

   One   Two   

 [XmlArray("Hotels")] [XmlArrayItem(typeof(Hotel), ElementName="Hotel")] public HotelList[] Messages { get; set; } 

应该产生:

     

 [XmlRoot("Hotels")] public class HotelList : IXmlSerializable { public System.Xml.Schema.XmlSchema GetSchema() { return null; } public void ReadXml(XmlReader reader) { this.Hotels = XDocument.Load(reader) .Select(h => new Hotel { Name = (string)h.Attribute("name") } .ToList(); } public void WriteXml(XmlWriter writer) { throw new NotSupportedException(); } } 

我认为madd0在这里显示了最简单的选项,但仅仅是为了完整性……我个人不推荐“将列表序列化为根对象” – 出于各种原因(包括:我看到这些属性不起作用)至少在平台上 – 可能是CF或SL,不记得了)。 相反,我总是建议使用自定义根类型:

 [XmlRoot("Hotels")] public class HotelResult // or something similar { [XmlElement("Hotel")] public List Hotels { get { return hotel; } } private readonly List hotels = new List(); } 

这将具有相同的xml结构,并允许更大的灵活性(您可以向根添加其他属性/元素),并且不会将List烘焙到您的类型模型中(更喜欢封装而不是inheritance等)。

上述就是C#学习教程:如何为List 实现设置XmlArrayItem元素名称?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

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

ctvol管理联系方式QQ:251552304

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

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐