I have class
public class Testowa
{
public string test { get; set; }
}
When I serialize it without value for test, I get
<test/>
But I want get
<test></test>
How I can do it?
If you don't wont use FileStream, you may use StringBuilder. XmlWriterEE class from Fab post.
public static string SerializeObject(this object obj)
{
var settings = new XmlWriterSettings
{
Encoding = Encoding.GetEncoding("ISO-8859-1"),
NewLineChars = Environment.NewLine,
ConformanceLevel = ConformanceLevel.Auto,
OmitXmlDeclaration = true,
WriteEndDocumentOnClose = true,
Indent = true
};
var stream = new StringBuilder();
using (var writer = XmlWriter.Create(stream, settings))
{
var xmlSerializer = new XmlSerializer(obj.GetType());
var namespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
xmlSerializer.Serialize(new XmlWriterEE(writer), obj, namespaces);
}
return stream.ToString();
}
From there,
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);
}
}
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);
The full XmlWriter derived class:
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);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With