XmlSerializeCustomCollectionwithAttribute我有一个简单的类,它继承自Collection并添加了几个属性。我需要将此类序列化为XML,但XMLSerializer忽略了我的其他属性。我假设这是因为XMLSerializer提供了对ICollection和IEnumerable对象的特殊处理。最好的解决方法是什么?下面是一些示例代码:usingSystem.Collections.ObjectModel;使用System.IO;使用System.Xml.Serialization;namespaceSerialiseCollection{classProgram{staticvoidMain(string[]args){varc=newMyCollection();c.Add("你好");c.Add("再见");varserializer=newXmlSerializer(typeof(MyCollection));使用(varwriter=newStreamWriter("test.xml"))serializer.Serialize(writer,c);}}[XmlRoot("MyCollection")]publicclassMyCollection:Collection{[XmlAttribute()]publicstringMyAttribute{get;放;}publicMyCollection(){this.MyAttribute="SerializeThis";这将输出以下XML(注意MyCollection元素中缺少MyAttribute):HelloGoodbye我想要HelloGoodbye有什么想法吗?越简单越好。谢谢。收藏品通常不是存放额外财产的好地方。在序列化和数据绑定期间,如果项目看起来像集合(IList、IEnumerable等——取决于场景),它们将被忽略。如果是我,我会包装集合-即[Serializable]publicclassMyCollectionWrapper{[XmlAttribute]publicstringSomeProp{get;set;}//自定义道具等[XmlAttribute]publicintSomeOtherProp{get;set;}//自定义propsetcpublicCollectionItems{get;set;}//theitems}另一种选择是实现IXmlSerializable(相当多的工作),但这仍然不适用于数据绑定等。基本上,这不是预期的用法.如果您按照MarcGravell的建议进行封装,那么本文的开头将解释如何让您的XML看起来与您描述的完全一样。http://blogs.msdn.com/youssefm/archive/2009/06/12/customizing-the-xml-for-collections-with-xmlserializer-and-datacontractserializer.aspx即,而不是这个:你好,再见吧可能是这样的:HelloGoodbye正如NeilWhitaker建议的那样,以防万一创建一个内部集合来存储字符串并应用XmlElement属性来屏蔽集合名称。生成与MyCollection继承自Collection相同的xml输出,但也序列化父元素的属性。[XmlRoot("MyCollection")]publicclassMyCollection{[XmlAttribute()]publicstringMyAttribute{get;放;}[XmlElement("string")]publicCollectionunserializedCollectionName{get;放;}publicMyCollection(){这个。MyAttribute="SerializeThis";this.unserializedCollectionName=newCollection();this.unserializedCollectionName.Add("你好");this.unserializedCollectionName.Add("再见");我一直在努力解决与Romaroo相同的问题(想在实现ICollection的类的xml序列化中添加属性)。我没有找到任何方法来公开集合类中的属性。我什至尝试使用XmlAttribute标记并使我的属性显示为根节点的属性,但也没有成功。但是,我能够在我的类上使用XmlRoot标记将其从“ArrayOf...”重命名。如果您有兴趣,这里有一个参考:有时您只是想做自己想做的事;有时您只是想做自己想做的事。该死的框架。我在这里发布了一个答案,列表的属性没有被反序列化,这是OP想要做的。以上就是C#学习教程:XmlSerialize拥有Attribute自定义集合共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
