2014-01-20 53 views
1

我想下面的代码序列化一个对象。问题是如果一些元素为空,那么他们有自我结束标签,如下所示:避免在XML中自我关闭标签

<City/>我想要这样的<City> </City>。有什么想法吗?

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

Like''或''?此外,根据XML规范,具有自闭标签的元素在语义上等同于立即关闭的元素,所以*为什么*您要这样做? – Dai

+0

我需要将XML传递给WCF服务,该服务不会识别这个, – user3217051

+0

您需要说明为什么自闭标签是一个问题。如果您无法处理格式良好的XML下游,则您的设计出现问题。 –

回答

2

至于有效性,既<City/><City> </City>是有效的,并会被任何XML解析器正确处理。

如果您仍想强制执行,请按照以下步骤操作。你在找什么是WriteFullEndElement()方法。 See MSDN更多:

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

这将迫使它序列City<City></City>inputCity是空的。