2014-01-20 3 views
1

개체를 serialize하려면 아래 코드를 시도하고 있습니다. 문제는 일부 요소가 null 인 경우 다음과 같은 자체 닫기 태그가있는 것입니다.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

이것을 인식하지 못하는 WCF 서비스에 XML을 전달해야합니다. – user3217051

+0

왜 자기 닫는 태그가 문제인지 말할 필요가 있습니다. 제대로 구성된 XML 다운 스트림을 처리 할 수 ​​없다면 디자인에 문제가 있습니다. –

답변

2

는 모두 <City/><City> </City>이 유효하고 XML 파서에 의해 정확하게 처리 될 것이다.

강제로 계속하려면 다음과 같이하십시오. 당신이 찾고있는 것은 WriteFullEndElement() 방법입니다. 이상 See MSDN :

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

inputCity가 비어 City<City></City> 같은 경우 직렬화를 강제 할 것이다.

관련 문제