使用XMLSerializer将属性添加到类成员

时间:2012-05-15 11:59:06

标签: c# xml wcf xmlserializer xml-attribute

我正在尝试编写一个使用XmlSerialzer输出xml的WCF服务。我需要一个特定的xml输出,这就是我没有使用DataContract Seriailzer的原因。具体来说,我正在编写一个目录服务Web(csw),它具有已定义的架构等。

我一直在尝试编写类,然后测试输出的XML。这相当繁琐,我可能会切换到xsd实用程序。我想知道的是,我可以将xml属性添加到其他类成员中,还是将那些修饰的xmlattributes添加到根元素,即类名?与使用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>

1 个答案:

答案 0 :(得分:2)

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

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

当然,你需要调整以获得你的命名空间等,但这是朝着正确的方向前进...希望它有所帮助:)

是的..当你嵌套元素时,你需要一个新的类...这有意义吗?原始如何导致嵌套值集?