Как сериализовать свойство типа XMLNode

1

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

[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-узла?
  • 0
    Нет, проблема в том, что это не всегда десериализованная собственность. Это может быть что угодно. В основном протокол для входящего XML: он должен быть заключен в корневой узел как <VariableXmlData>, а дочерние узлы могут быть чем угодно, а также любым числом.
Показать ещё 2 комментария
Теги:
serialization
xmlnode

1 ответ

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
      }
}

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

  • 0
    Спасибо Седрик! Просто хотел повторить ваше предложение, чтобы убедиться, что я правильно понял. В разделе get «VariableXMLDataParts» я возвращаю дочерние узлы? учитывая мой пример, должен ли он возвращать узлы "<Change> Major </ Change> <Reason> Unknown </ Reason>"? Так как это может быть много в числах, я должен использовать NodeList или что-то? Кроме того, я не смогу десериализовать его, так как это может быть любая строка xmlstring. Единственный протокол: строка XML должна быть заключена в тег <VariableXMLData>
  • 0
    да, вы можете вернуть дочерние узлы, и если вы вернете ChildNodes, то результатом будет xmlNodeList. Поскольку в качестве содержимого будут другие узлы xml, вы все равно можете получать дочерние узлы независимо от того, какие имена у них есть. это верно?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню