0

我正在尝试编写一个使用 XmlSerialzer 输出 xml 的 WCF 服务。我需要一个特定的 xml 输出,这就是我不使用 DataContract Serialzer 的原因。具体来说,我正在编写一个具有已定义架构等的目录服务 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>
4

1 回答 1

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>

自然,您需要调整以获取名称空间等,但这正朝着正确的方向前进……希望对您有所帮助:)

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

于 2012-05-15T12:33:35.937 回答