2012-05-15 2 views
0

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

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

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

<ows:ContactInfo> 
<ows:OnlineResource 
    xlink:href="mailto:­­[email protected]­­"/> 
</ows:ContactInfo> 

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

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

      [XmlElementAttribute(ElementName = "OnlineResource",Namespace = "http://www.w3.org /1999/xlink")] 
      public string href = "mailto:[email protected]"; 

     } 

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

<ows:ContactInfo xlink:href="mailto:[email protected]"> 
<ows:OnlineResource>mailto:[email protected]</ows:OnlineResource> 
</ows:ContactInfo> 
+0

жаль выход мне нужно: <РМО: ContactInfo> <РМО: ElectronicMailAddress> [email protected] <РМО: OnlineResource xlink: href = "mailto: [email protected]" /> Euston

ответ

2

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

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

[XmlType("OnlineResource")] 
public class OnlineResource 
{ 
    [XmlAttribute("href")] 
    public string href = "mailto:[email protected]"; 
} 

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

<ContactInfo> 
    <OnlineResource href="mailto:[email protected]" /> 
</ContactInfo> 

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

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

+0

Да, спасибо, вот что я подумал! Просто нужно привыкнуть к многому созданию класса! – Euston

+0

Если этот ответ решил вашу проблему, пожалуйста, отметьте его как ответ :) – iDevForFun

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