estoy usando este método para serializar mi objetivo:¿Cómo controlo la parte <?xml ?> de la serialización xml con .NET?
public static string XmlSerialize(object o)
{
var stringWriter = new StringWriter();
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(stringWriter, o);
string xml = stringWriter.ToString();
stringWriter.Close();
return xml;
}
Hace XML que comienza así:
<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Pero yo quiero que se vea como esto:
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Entonces, ¿cómo cambio la codificación a Windows-1252 y establezco standalone = yes? Además, ¿cómo consigo que el objeto excluya el valor xmlns?
He visto un par de preguntas similares, como this one, pero esperaba que pudiera ser más simple para mí, tal vez estableciendo algunos atributos en alguna parte.
Actualización 2: Después de ver las respuestas y los comentarios de John, y pensando en esto más, decidí simplemente hacer un segundo método. No creo que la creación de este extravagante xml personalizado solo para una tercera parte en una ocasión deba llamarse algo tan genérico como "XmlSerialize" en primer lugar.
tanto, he creado un segundo método que toma un documento XML y en primer lugar, elimina el elemento de un espacio de nombres como esto:
xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();
entonces, que lo escribe en XML con código de Juan. Finalmente devuelve ese xml, tras la salida de este:
new XDeclaration("1.0", "Windows-1252", "yes").ToString()
Y eso es feo, pero me pone exactamente lo que necesito para esta tercera parte para entender mi XML.
Realmente, use 'XmlReader.Create' y' XmlWriter.Create' en lugar de 'XmlTextReader' y' XmlTextWriter'. Además, debe colocar estas cosas en bloques 'using'. –
En última instancia, fui con su código. Pero me pregunto, siempre que cierre todo, ¿no es eso tan bueno como usar bloques? – Chris
No. Los bloques 'using' se aseguran de que los objetos se eliminen, incluso cuando ocurran excepciones. –