Estoy utilizando una biblioteca de clases que representa parte de su configuración en .xml. La configuración se lee utilizando el XmlSerializer
. Afortunadamente, las clases que representan .xml usan el atributo XmlAnyElement
en el cual me permite extender los datos de configuración para mis propios fines sin modificar la biblioteca de clases original.¿Cómo creo un XmlNode de una llamada a XmlSerializer.Serialize?
<?xml version="1.0" encoding="utf-8"?>
<Config>
<data>This is some data</data>
<MyConfig>
<data>This is my data</data>
</MyConfig>
</Config>
Esto funciona bien para la deserialización. Puedo permitir que la biblioteca de clases deserialice el .xml de forma normal y puedo usar mis propias instancias XmlSerializer
con un XmlNodeReader
contra el XmlNode
interno.
public class Config
{
[XmlElement]
public string data;
[XmlAnyElement]
public XmlNode element;
}
public class MyConfig
{
[XmlElement]
public string data;
}
class Program
{
static void Main(string[] args)
{
using (Stream fs = new FileStream(@"c:\temp\xmltest.xml", FileMode.Open))
{
XmlSerializer xser1 = new XmlSerializer(typeof(Config));
Config config = (Config)xser1.Deserialize(fs);
if (config.element != null)
{
XmlSerializer xser2 = new XmlSerializer(typeof(MyConfig));
MyConfig myConfig = (MyConfig)xser2.Deserialize(new XmlNodeReader(config.element));
}
}
}
Necesito crear una utilidad que permitirá al usuario generar un nuevo archivo de configuración que incluye tanto la configuración de la biblioteca de clases, así mi propia configuración, por lo que se crearán nuevos objetos que no se lee desde el. archivo xml La pregunta es ¿cómo puedo serializar los datos de nuevo en .xml?
Me doy cuenta de que tengo que llamar inicialmente al XmlSerializer.Serialize
en mis datos antes de llamar al mismo método en la configuración de la biblioteca de clases. Sin embargo, esto requiere que mis datos estén representados por un XmlNode
después de llamar al Serialize
. ¿Cuál es la mejor manera de serializar un objeto en un XmlNode
usando el XmlSerializer
?
Gracias,
-Kevin
btw-- Parece una clase XmlNodeWriter
escrito por Chris Lovett estaba disponible en un tiempo de Microsoft, pero los enlaces están rotos. ¿Alguien sabe de una ubicación alternativa para obtener esta clase?
'doc.DocumentElement 'devuelve el' XmlNode' deseado. – tm1