2017-02-03 3 views
1

API-интерфейс я хочу использовать требует, чтобы я так установить xmlns атрибута по на вложенном элементе, как это:C# XmlSerializer: Создать атрибут XMLNS на вложенном объекте

<root> 
    <mainelement> 
    </mainelement> 
    <mainelement> 
     <subelement xmlns="http://example.com/xml" otherAttr="value"> 
     </subelement> 
    </mainelement>  
</root> 

Класс subelement определяется так :

public class subelement 
{ 
    [XmlAttribute] 
    public string otherAttr { get; set; } 
    [XmlAttribute] 
    public string xmlns { get; set; } = "http://example.com/xml"; 
} 

Однако, когда я пытаюсь сериализации корневого объекта с XmlSerializer xmlns всегда атрибут по недостающее. В противном случае он работает нормально. Когда я переименую этот атрибут, он создал, поэтому я думаю, что это имеет какое-то отношение к xmlns как зарезервированное ключевое слово.

Также я не могу использовать стандартный способ установки пространств имен в качестве третьего параметра метода Serialize, потому что я просто хочу, чтобы этот атрибут находился на объекте subelement.

Есть ли способ выполнить это без ручного редактирования файла после сериализации?

+0

Это необходимо решить, просто установив [пространство имен] (https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.namespace (v = vs.110) .aspx) в 'subeclement' [XmlElementAttribute] (https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute (v = vs.110) .aspx) – Filburt

ответ

2

Необходимо указать правильное пространство имен на subelement в mainelement.

public class mainelement 
{ 
    [XmlElement(Namespace = "http://example.com/xml")] 
    public subelement subelement { get; set; } 
} 

public class subelement 
{ 
    [XmlAttribute] 
    public string otherAttr { get; set; }  
} 

См. this fiddle для рабочей демонстрации.

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