C# 避免XML中的自动关闭标记

C# 避免XML中的自动关闭标记,c#,xml,C#,Xml,我正在尝试下面的代码来序列化一个对象。问题是,如果某些元素为空,则它们具有如下自动关闭标记: 我想成为这样的。有什么想法吗 private string GetXMLFromObject(object o) { XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; MemoryStream ms = new MemoryStream();

我正在尝试下面的代码来序列化一个对象。问题是,如果某些元素为空,则它们具有如下自动关闭标记:

我想成为这样的
。有什么想法吗

private string GetXMLFromObject(object o)
{
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;
    MemoryStream ms = new MemoryStream();
    XmlWriter writer = XmlWriter.Create(ms, settings);
    XmlSerializerNamespaces names = new XmlSerializerNamespaces();
    names.Add("", "");
    XmlSerializer serializer = new XmlSerializer(o.GetType());
    serializer.Serialize(writer, o, names);
    ms.Flush();
    ms.Seek(0, SeekOrigin.Begin);
    StreamReader sr = new StreamReader(ms);
    string xml = sr.ReadToEnd();
    return xml;
}

关于有效性,
都是有效的,任何XML解析器都会正确处理它们

如果仍要强制执行,请执行以下操作。您正在寻找的是
writeFileLendElement()
方法。更多信息:

writer.WriteStartElement("City");
writer.WriteString(inputCity);
writer.WriteFullEndElement();

inputCity
为空时,这将强制它将
City
序列化为

类似于
?另外,根据XML规范,具有自动关闭标记的元素在语义上等同于立即关闭的元素,那么您为什么要这样做呢?我需要将XML传递给一个WCF服务,该服务无法识别这一点,您需要说明为什么自动关闭标记是一个问题。如果您不能处理格式良好的XML下游,那么您的设计就有问题。