2014-01-20 94 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是空的。