当前位置: 首页 > 编程语言 > C#

防止XmlSerializer中没有数据时自闭标签分享

时间:2023-04-10 10:56:46 C#

防止XmlSerializer中无数据时自闭标签我序列化值时:如果数据中没有值,那么就是像下面的格式是一样的。由PPS确认,但我想要以下格式的xml数据:由PPS确认我为此编写的代码:[Serializable]publicclassNotes{[XmlElement("Type")]publicstringtypeName{get;放;}[XmlElement("Data")]publicstringdataValue{get;放;如果没有分配任何值,我无法弄清楚如何以下面的格式实现数据。由PPS确认您可以通过创建自己的XmlTextWriter进入序列化过程。publicclassMyXmlTextWriter:XmlTextWriter{publicMyXmlTextWriter(Streamstream):base(stream,Encoding.UTF8){}publicoverridevoidWriteEndElement(){base.WriteFullEndElement();}}您可以使用以下方法测试结果:varwriter=newMyXmlTextWriter(stream);serializer.Serialize(writer,newNotes(){typeName="AcknowledgedbyPPS",dataValue=""});varresult=Encoding.UTF8.GetString(stream.ToArray());控制台.WriteLine(结果);}控制台.ReadKey();IMO无法使用序列化生成所需的XML。但是,您可以使用LINQtoXML生成所需的架构,如下所示-XDocumentxDocument=newXDocument();XElementrootNode=newXElement(typeof(Notes).Name);foreach(varpropertyintypeof(Notes).GetProperties()){if(property.GetValue(a,null)==null){property.SetValue(a,string.Empty,null);}XElementchildNode=newXElement(property.Name,property.GetValue(a,null));rootNode.Add(childNode);}xDocument.Add(rootNode);XmlWriterSettingsxws=newXmlWriterSettings(){Indent=true};使用(XmlWriterwriter=XmlWriter.Create("D:\Sample.xml",xws)){xDocument.Save(writer);}如果你的值为空,你应该将它设置为空字符串主要捕获如果你的值为空,你应该将它设置为空字符串。它将强制生成结束标记。如果值为null,则不会创建结束标记。Kludge时间-请参阅生成在HTML中有效的System.Xml.XmlDocument.OuterXml()输出基本上,在生成XML文档后,遍历每个节点,如果没有子节点,则添加一个空文本节点//使用addSpaceToEmptyNodes(xmlDoc.FirstChild);privatevoidaddSpaceToEmptyNodes(XmlNodenode){if(node.HasChildNodes){foreach(XmlNodechildinnode.ChildNodes)addSpaceToEmptyNodes(child);}elsenode.AppendChild(node.OwnerDocument.CreateTextNode(""))}(是的,我知道你不应该这样做-但如果你要将XML发送到其他一些你无法轻松解决的系统,一些必须做)您可以添加虚拟字段以防止自关闭元素。[XmlText]publicstringdatavalue="";或者,如果您想要班级的代码,那么您的班级应该如下所示。以上就是C#学习教程:没有数据时,防止XmlSerializer中的自闭标签共享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicclassNotes{[XmlElement("Type")]publicstringtypeName{get;放;}[XmlElement("Data")]私有字符串_dataValue;publicstringdataValue{get{if(string.IsNullOrEmpty(_dataValue))返回"";否则返回_dataValue;}设置{_dataValue=值;}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: