Использование 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>
Естественно, вам нужно настроить, чтобы получить ваши пространства имен и т. Д., Но это движется в правильном направлении... надеюсь, это поможет:)
Да... когда вы вкладываете элементы, вам нужен новый класс... это имеет смысл? Как бы примитив привел к вложенному набору значений?