2013-11-11 2 views
0

У меня есть следующая функция, которую я могу передать моему объекту C#, который затем может преобразовать его в Xml.Как добавить дочерний элемент после элемента Root

public static XmlDocument SerializeObjectToXML(object obj) 
{ 
    XmlSerializer serializer = 
     new XmlSerializer(obj.GetType()); 

    using (MemoryStream ms = new MemoryStream()) 
    { 
    XmlDocument xmlDoc = new XmlDocument(); 
    serializer.Serialize(ms, obj); 
    ms.Position = 0; 
    xmlDoc.Load(ms); 
    } 
} 

Однако мне необходимо добавить Детский элемент после корня. Например, на данный момент у меня

<MyObjectResponse> 
    <Id>1</Id> 
    <Name>Mr Smith</Name> 
    <Numbers> 
     <Number>100</Number> 
     <Number>200</Number> 
    </Numbers> 
</MyObjectResponse> 

Но хочу выход к

<MyObjectResponse> 
    <Response> 
    <Id>1</Id> 
    <Name>Mr Smith</Name> 
    <Numbers> 
     <Number>100</Number> 
     <Number>200</Number> 
    </Numbers> 
    </Response> 
</MyObjectResponse> 

Как я могу добиться этого?

+0

См. Мое редактирование. Просто замените предыдущий цикл foreach на текущий цикл while. Он должен работать по запросу. –

ответ

0

Что-то вроде этого следует сделать трюк:

XmlDocument xmlDoc = new XmlDocument(); 
serializer.Serialize(ms, obj); 
ms.Position = 0; 
xmlDoc.Load(ms); 

XmlElement newElem = xmlDoc.CreateElement("Response"); 

//wrong: works for only 1 child element 
//kept for edit/reference 
//foreach (XmlNode item in xmlDoc.DocumentElement.ChildNodes) 
//{ 
// newElem.AppendChild(item); 
//} 

while (xmlDoc.DocumentElement.ChildNodes.Count != 0) 
{ 
    newElem.AppendChild(xmlDoc.DocumentElement.ChildNodes[0]); 
} 

xmlDoc.DocumentElement.AppendChild(newElem); 

EDIT заменить петлю foreach с правильной и общей реализации с использованием while цикла.

+0

Спасибо, но я хочу сохранить все существующие дочерние элементы – Tommassiov

+0

@ Tommo1977, извините, я не понимаю, о чем вы спрашиваете. Где вы хотите сохранить существующие дочерние элементы? –

+0

@ Tommo1977, только что видел ваше редактирование. Подождите минуту или две. –

Смежные вопросы