XML serialization force full closing tag on null or empty value

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

Extend XmlWriter

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