使用 XMLSerializer 向类成员添加属性



我正在尝试编写一个使用 XmlSerialzer 输出 xml 的 WCF 服务。我需要一个特定的xml输出,这就是为什么我不使用DataContract Seriailzer的原因。具体来说,我正在编写一个具有定义模式等的目录服务 web(csw)。

我一直在尝试先编写类,然后测试输出的XML。这是相当乏味的,我可能会切换到xsd实用程序。我想知道的是我可以将 xml 属性添加到其他类成员,还是那些装饰的 xml 属性只会添加到根元素(即类名)中?与使用 XDocument 手动编写 CML 相比,似乎存在灵活性问题。另外每次我需要嵌套元素(不是集合)时,似乎我需要创建一个新类?是吗?

我需要的输出 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>

您需要更改对象模型才能实现此目的...尝试这样的事情...

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

当然,您需要进行调整以获取命名空间等,但这正朝着正确的方向发展......希望对:)有所帮助

是的..当你嵌套元素时,你将需要一个新类......这有道理吗?基元如何生成一组嵌套的值?