Использование XMLSerializer для добавления атрибутов в член класса

Я пытаюсь написать службу WCF, которая использует XmlSerialzer для вывода xml. Мне нужен конкретный вывод XML, поэтому я не использую DataContract Seriailzer. В частности, я пишу веб-службы каталогов (CSW), которая имеет определенную схему и т. Д.

Я пытался сначала написать классы, а затем проверить, какой XML выводится. Это довольно утомительно, и я могу переключиться на утилиту xsd. Что я хотел бы знать, так это то, могу ли я добавить атрибуты xml к другим членам класса или эти украшенные атрибуты xmlattributes будут добавлены только к корневому элементу, то есть к имени класса? Кажется, есть проблемы с гибкостью по сравнению с написанием CML вручную с использованием XDocument. Также каждый раз, когда мне нужно вложить элементы (не коллекции) Кажется, мне нужно создать новый класс? Это правильно?

Выходной XML мне нужно:

<ows:ContactInfo> 
<ows:OnlineResource 
   xlink:href="mailto:­­enquiry@gis.nottscc.gov.uk­­"/> 
</ows:ContactInfo>

Вот мой класс:

   public class ContactInfo
       {
            [XmlElement] 
            public string OnlineResource = "";        

            [XmlElementAttribute(ElementName = "OnlineResource",Namespace = "http://www.w3.org /1999/xlink")]
            public string href = "mailto:enquiry@gis.nottscc.gov.uk";

         }

который выводит xml следующим образом:

<ows:ContactInfo xlink:href="mailto:enquiry@gis.nottscc.gov.uk">
<ows:OnlineResource>mailto:enquiry@gis.nottscc.gov.uk</ows:OnlineResource>
</ows:ContactInfo>

1 ответ

Решение

Вам нужно будет изменить объектную модель, чтобы это произошло... попробуйте что-то вроде этого...

 [XmlType("ContactInfo")]
 public class ContactInfo
 {
    [XmlElement("OnlineResource")]
    public OnlineResource Resource { get; set; }
 }

 [XmlType("OnlineResource")]
 public class OnlineResource
 {
     [XmlAttribute("href")]
     public string href = "mailto:enquiry@gis.nottscc.gov.uk";
 }

Выход для этого...

<ContactInfo>
  <OnlineResource href="mailto:enquiry@gis.nottscc.gov.uk" />
</ContactInfo>

Естественно, вам нужно настроить, чтобы получить ваши пространства имен и т. Д., Но это движется в правильном направлении... надеюсь, это поможет:)

Да... когда вы вкладываете элементы, вам нужен новый класс... это имеет смысл? Как бы примитив привел к вложенному набору значений?

Другие вопросы по тегам