2012-06-14 3 views
5

Мне нужно создать что-то вроде этого:XML сериализация + Namespaces (C#)

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

Я пытался что-то вроде этого, но это не совсем правильно:

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(); 

И результат:

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

И это не совсем то, что я хочу. Любые идеи, что нужно делать по-другому?

+1

'XSI: noNamespaceSchemaLocation = "AMZN-envelope.xsd"' это не декларация пространства имен. Вам нужно будет добавить атрибут 'noNamespaceShcemaLocation' в пространстве имен' xsi' в элемент 'AmazonEnvelope', но я не могу увидеть простой способ сделать это в документации, если у вас нет доступа к источнику XMLAmazonEnvelope '. В этом случае вы можете добавить к этому классу поле/свойство, аннотированное с помощью '[XmlAttribute]' с именем «noNamespaceSchemaLocation» и нужное значение. – millimoose

+0

Или, возможно, это возможно при доступе к источнику с помощью 'XmlAttributeOverrides', но я не знаю, как именно работает этот API. – millimoose

+0

XmlAttribute разрешает только поля, свойства, индексы, и у меня есть: – user1359657

ответ

Смежные вопросы