c#inheritancegenerics集合与序列化设置:classItem{privateint_value;公共项目(){_value=0;}publicintValue{get{return_value;}设置{_value=值;}}}classItemCollection:Collection{私有字符串_name;publicItemCollection(){_name=string.Empty;}publicstringName{get{return_name;}set{_name=value;}}}现在,尝试使用以下代码片段进行序列化:ItemCollectionitems=newItemCollection();...XmlSerializer序列化器=newXmlSerializer(typeof(ItemCollection));使用(FileStreamf=File.Create(fileName))serializer.Serialize(f,items);查看生成的XML后,我发现ItemCollection.Name值不存在!我认为可能发生的情况是序列化程序将ItemCollection类型视为一个简单的集合,因此忽略了任何其他添加的属性......有没有人遇到过这样的问题并找到了解决方案?问候,Stécy此行为是设计使然”。当从集合类派生时,XmlSeralizier将仅序列化集合元素。要解决此问题,您应该创建一个封装集合和名称的类,并将其序列化。类包装器{私人收藏_items;私有字符串_name;公共收藏品{get{return_items;}设置{_items=值;}}publicstringName{get{return_name;}设置{_name=值;有关详细信息,请访问:http://blogs.vertigo.com/personal/chris/Blog/archive/2008/02/01/xml-serializing-a-derived-collection.aspxXmlSerializerisevil。也就是说,任何实现IEnumerable的对象都将被序列化为一个简单的集合,忽略您自己添加的任何额外属性。您需要创建一个包含属性和返回集合的属性的新类。我不确定我是否遗漏了什么,但您想获取xml名称val12如果是这样,只需将XmlRoot属性应用于itemcollection类并设置元素名称...[XmlRoot(ElementName="ItemCollection")]publicclassItemCollection:Collection{[XmlElement(ElementName="Name")]publicstringName{get;set;}}这将指示序列化程序为您的集合容器输出所需的名称。您还可以尝试使用IXmlSerializable接口实现您自己的序列化publicclassItemCollection:Collection,IXmlSerializable{privatestring_name;publicItemCollection(){_name=string.Empty;}publicstringName{get{return_name;}设置{_name=值;}}#regionIXmlSerializable成员publicSystem.Xml.Schema.XmlSchemaGetSchema(){returnnull;}publicvoidReadXml(System.Xml.XmlReaderreader){}publicvoidWriteXml(System.Xml.XmlWriterwriter){writer.WriteElementString("name",_name);列表coll=newList(this.Items);XmlSerializer序列化器=newXmlSerializer(coll.GetType());serializer.Serialize(writer,coll);}#endregion}上面的代码会生成序列化的xml如上是C#学习教程:c#inheritancegenericscollection以及序列化共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——12publicclassAnimals:List,IXmlSerializable{privatestaticType[]_animalTypes;//forIXmlSerializablepublicAnimals(){_animalTypes=GetAnimalTypes().ToArray();//对于IXmlSerializable}//这个静态ma让您访问任何其他类中的相同Animals实例。私人静态动物_animals=newAnimals();publicstaticAnimalsanimals{get{return_animals;}设置{_animals=值;}}#regionIXmlSerializable成员publicSystem.Xml.Schema.XmlSchemaGetSchema(){returnnull;}publicvoidReadXml(System.Xml.XmlReaderreader){boolwasEmpty=reader.IsEmptyElement;读者。阅读();如果(wasEmpty)返回;阅读器.MoveToContent();reader.ReadStartElement("动物");//如果Animals类没有“List”字段但派生自“List”,则必须使用“List”反序列化。列表coll=GenericSerializer.Deserialize>(reader,_animalTypes);//然后,您可以将“动物”设置为“列表”。_animals.AddRange(科尔);reader.ReadEndElement();//读取结束元素reader.ReadEndElement();}publicvoidWriteXml(System.Xml.XmlWriterwriter){writer.WriteStartElement("Animals");//首先将'List'更改为'Animals'。列表coll=newList(_anim也);//然后,您可以使用“List”序列化“Animals”。GenericSerializer.Serialize>(coll,writer,_animalTypes);writer.WriteEndElement();}#endregionpublicstaticListGetAnimalTypes(){列表类型=newList();程序集asm=typeof(Animals).Assembly;输入tAnimal=typeof(Animal);//查询我们的类型。我们还可以加载任何其他程序集并//查询它们是否有继承自Animal的任何类型types.Add(currType);}返回类型;}}本文收集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
