2012-06-14 20 views
5

que necesito para generar algo como esto:serialización XML + espacios de nombres (C#)

<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd"> 
<Header> 
... 
</Header> 
</AmazonEnvelope> 

yo estaba tratando de algo como esto, pero no es totalmente correcta:

XmlSerializerNamespaces nms = new XmlSerializerNamespaces(); 
     nms.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
     nms.Add("noNamespaceSchemaLocation", "amzn-envelope.xsd"); 



     XmlSerializer serializer = new XmlSerializer(typeof(XMLAmazonEnvelope)); 
     StreamWriter writer = new StreamWriter(path); 

     serializer.Serialize(writer, objectToSave,nms); 
     writer.Close(); 

y el resultado es:

<?xml version="1.0" encoding="utf-8"?> 
<xsi:AmazonEnvelope xmlns:noNamespaceSchemaLocation="amzn-envelope.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<xsi:Header> 
... 
</xsi:Header> 
</xsi:AmazonEnvelope> 

Y esto no es exactamente lo que quiero. Alguna idea, ¿qué se debe hacer de manera diferente?

+1

'xsi: noNamespaceSchemaLocation = "AMZN-envelope.xsd"' no es una declaración de espacio de nombres. Tendrá que agregar un atributo 'noNamespaceShcemaLocation' en el espacio de nombres' xsi' al elemento 'AmazonEnvelope', pero realmente no puedo ver una forma directa de hacerlo en la documentación a menos que tenga acceso a la fuente de' XMLAmazonEnvelope '. En ese caso, podría agregar un campo/propiedad a esa clase anotada con '[XmlAttribute]' con el nombre 'noNamespaceSchemaLocation' y el valor que desee. – millimoose

+0

O tal vez es posible con el acceso a la fuente utilizando 'XmlAttributeOverrides', pero no tengo idea exactamente cómo funciona esa API. – millimoose

+0

XmlAttribute solo permite campos, propiedades, índices y tengo: – user1359657

Respuesta

Cuestiones relacionadas