Кажется странным, что вы смешиваете сериализацию Xml с узлами Xml и, как вы сказали, этот узел может быть атрибутом или элементом. Обычно вы бы сериализовали XmlNode как часть XmlDocument, используя функции XmlDocument.Save ().
Я думаю, что может быть проще сериализовать XmlNode в виде строки. Может быть, что-то вроде этого:
[XmlIgnore]
public XmlNode NewValue { get; set; }
[XmlElement("Dest")]
public string NewValueString { get; set; }
{
get { return NewValue.OuterXml; } // Edit: this property can't directly
set { NewValue.OuterXml = value; } // set OuterXml
}
Массивная правка:
На секунду подумал ....
Вы смешиваете два разных способа работы с Xml, и нет прямого способа заставить это работать.
Нельзя использовать сериализацию Xml со свойством типа XmlNode или XmlAttribute или XmlElement. XmlNode и его подклассы не имеют открытого конструктора без параметров, необходимого для сериализации Xml. Они могут быть созданы только через XmlDocument. Кроме того, сериализация Xml работает путем отражения и сохранения всех общедоступных свойств get / set, а XmlNode и подклассы не имеют свойств, предназначенных для этого.
Вы по-прежнему можете сериализовать XmlNode в виде строки (вы просто не можете реализовать ее напрямую, как показано выше), затем вам придется выполнить некоторый шаг постобработки после десериализации xml, чтобы воссоздать XmlNode.
Но опять же, вы смешиваете два разных способа работы с Xml, и это вызывает у меня некоторые предупреждающие флажки.