2014-08-30 3 views
1

У меня есть открытый класс со свойством, как:Как сериализовать свойство типа XMLNode

[serializable] 
public class Data 
{ 
Public XmlNode VariableXMLData {get; set;} 
} 

Узел VariableXMLData INTURN содержит XmlNode. Например, говорят:

VariableXMLData.OuterXML is " 
<VariableXMLData> 
<Change>Major</Change><Reason>Unknown</Reason> 
</VariableXMLData> ". 

Проблема: Когда я сериализация этого класса, вывод выглядит следующим образом:

<Data> 
<VariableXMLData> 
<VariableXMLData> 
<Change>Major</Change><Reason>Unknown</Reason> 
</VariableXMLData> 
</VariableXMLData> 
</Data> 

Как я могу избежать несколько тегов для имени элемента здесь. Я хочу иметь только один узел для <VariableXMLData>

+0

не будет ли он десериализован должным образом с другой стороны, а затем просто иметь свой узел xml внутри? – Noctis

+0

Нет, проблема в том, что это не всегда будет десериализованным свойством. Это может быть что угодно. В основном протокол для входящего xml: он должен быть обернут корневым узлом как , а дочерние узлы могут быть любыми, а также любыми цифрами – Rony

+0

Дайте ответ Седрику вращение. Если нет, и в зависимости от ваших потребностей вы могли бы просто JSON это. Он должен обрабатывать XML в порядке. – Noctis

ответ

0

Я хотел бы пойти на что-то вроде этого:

[serializable] 
public class Data 
{ 
    [XmlIgnore] 
    Public XmlNode VariableXMLData {get; set;} 

    [XmlElement(ElementName="VariableXMLData")] 
    Public XmlNode VariableXMLDataParts { 
     get{ 
     //handle the deserialization => returning the nodes you wish to return 
     // example only return the roots descendants... 
     } 
     set{ 
      // handle your serialization if needed 
     } 
} 

Не уверен, что это, но я думаю, что вы можете поместить второй метод внутренней или защищен, поэтому он выиграл» t отображается на другие сборки

+0

Спасибо, Седрик! Просто хотел повторить ваше предложение, чтобы убедиться, что я правильно понял. В разделе получения «VariableXMLDataParts» возвращаю ли дочерние узлы? учитывая мой пример, должен ли он возвращать узлы " Major Unknown"? Поскольку это может быть много в числах, следует ли использовать NodeList или что-то еще? Кроме того, я не смогу десериализовать его, поскольку это может быть любая xmlstring. Единственный протокол: строка xml должна быть заключена в тег Rony

+0

да, вы можете вернуть дочерние узлы, и если вы вернете дочерние узлы, то результатом будет xmlNodeList. Поскольку сдерживание будет другим узлом xml, вы все равно можете получить childNodes независимо от того, какие имена у них есть. это верно? –

+0

Привет, Седрик, я добавил тэг [XmlAnyElement] в свойство Public XmlNode VariableXMLData. Это решило мою проблему. Теперь я не получаю дубликат тега в моей сериализованной строке. Но я пытаюсь выяснить, правильный ли мой подход. Может ли это иметь некоторые неправильные последствия? Пожалуйста, дайте мне знать об этом. – Rony

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