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;
        }

 

原文地址:https://www.cnblogs.com/yibey/p/12922379.html