XML序列化强制对空值或空值使用完全结束标记 [英] XML serialization force full closing tag on null or empty value
本文介绍了XML序列化强制对空值或空值使用完全结束标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有课
public class Testowa
{
public string test { get; set; }
}
当我将其序列化而没有测试价值时,我得到
When I serialize it without value for test, I get
<test/>
但是我想得到
<test></test>
我该怎么做?
推荐答案
扩展XmlWriter
来自有,
如果您使用与以下类似的代码您的序列化:
If you use a code similar to the following for your serialization:
XmlSerializer s = new XmlSerializer(typeof(Testowa));
using (FileStream fs = new FileStream(File, FileMode.CreateNew))
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.GetEncoding("ISO-8859-1");
settings.NewLineChars = Environment.NewLine;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(fs, settings))
{
s.Serialize(writer, this);
}
}
将最后一行替换为 XmlWriter
这将强制序列化完全关闭标签:
Replace the last line with a derived version of XmlWriter
which will force the serialization of full closing tags:
s.Serialize(new XmlWriterEE(writer), this);
完整的XmlWriter派生类:
public class XmlWriterEE : XmlWriter
{
private XmlWriter baseWriter;
public XmlWriterEE(XmlWriter w)
{
baseWriter = w;
}
//Force WriteEndElement to use WriteFullEndElement
public override void WriteEndElement() {baseWriter.WriteFullEndElement(); }
public override void WriteFullEndElement()
{
baseWriter.WriteFullEndElement();
}
public override void Close()
{
baseWriter.Close();
}
public override void Flush()
{
baseWriter.Flush();
}
public override string LookupPrefix(string ns)
{
return (baseWriter.LookupPrefix(ns));
}
public override void WriteBase64(byte[] buffer, int index, int count)
{
baseWriter.WriteBase64(buffer, index, count);
}
public override void WriteCData(string text)
{
baseWriter.WriteCData(text);
}
public override void WriteCharEntity(char ch)
{
baseWriter.WriteCharEntity(ch);
}
public override void WriteChars(char[] buffer, int index, int count)
{
baseWriter.WriteChars(buffer, index, count);
}
public override void WriteComment(string text)
{
baseWriter.WriteComment(text);
}
public override void WriteDocType(string name, string pubid, string sysid, string subset)
{
baseWriter.WriteDocType(name, pubid, sysid, subset);
}
public override void WriteEndAttribute()
{
baseWriter.WriteEndAttribute();
}
public override void WriteEndDocument()
{
baseWriter.WriteEndDocument();
}
public override void WriteEntityRef(string name)
{
baseWriter.WriteEntityRef(name);
}
public override void WriteProcessingInstruction(string name, string text)
{
baseWriter.WriteProcessingInstruction(name, text);
}
public override void WriteRaw(string data)
{
baseWriter.WriteRaw(data);
}
public override void WriteRaw(char[] buffer, int index, int count)
{
baseWriter.WriteRaw(buffer, index, count);
}
public override void WriteStartAttribute(string prefix, string localName, string ns)
{
baseWriter.WriteStartAttribute(prefix, localName, ns);
}
public override void WriteStartDocument(bool standalone)
{
baseWriter.WriteStartDocument(standalone);
}
public override void WriteStartDocument()
{
baseWriter.WriteStartDocument();
}
public override void WriteStartElement(string prefix, string localName, string ns)
{
baseWriter.WriteStartElement(prefix, localName, ns);
}
public override WriteState WriteState
{
get { return baseWriter.WriteState; }
}
public override void WriteString(string text)
{
baseWriter.WriteString(text);
}
public override void WriteSurrogateCharEntity(char lowChar, char highChar)
{
baseWriter.WriteSurrogateCharEntity(lowChar, highChar);
}
public override void WriteWhitespace(string ws)
{
baseWriter.WriteWhitespace(ws);
}
}
这篇关于XML序列化强制对空值或空值使用完全结束标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文