Net 使用XmlSerializer序列化对象,如果属性值为空字符串的时候,序列化后的节点强制不简写
问题概述,最近在接某些特殊部门的项目后,发现当我生成一个XML报文后,当属性为空字符串的时候,生成的xml节点默认是缩写模式比如
public string note {get;set;}
生成的xml 节点是<note />,目标期望生成<note></note>
解决
直接上代码
public class XmlTextWriterFull : XmlTextWriter { public XmlTextWriterFull(TextWriter sink) : base(sink) { } public XmlTextWriterFull(Stream stream, Encoding enc) : base(stream, enc) { } public XmlTextWriterFull(String str, Encoding enc) : base(str, enc) { } public override void WriteEndElement() { base.WriteFullEndElement(); } }
调用
public static string XmlSerialize1(object o, Encoding encoding) { if (o == null) throw new ArgumentNullException("o"); if (encoding == null) throw new ArgumentNullException("encoding"); string xml = ""; try { System.IO.MemoryStream memOut = new System.IO.MemoryStream(); XmlTextWriterFull writer = new XmlTextWriterFull(memOut, Encoding.UTF8); var serializer = new XmlSerializer(o.GetType()); serializer.Serialize(writer, o); memOut.Position = 0; using (StreamReader reader = new StreamReader(memOut, Encoding.UTF8)) { xml = reader.ReadToEnd(); } return xml; } catch (Exception ex) { } return xml; }