【问题标题】:Using XMLSerializer to add attributes to a Class Member使用 XMLSerializer 向类成员添加属性
【发布时间】:2012-05-15 11:59:05
【问题描述】:

我正在尝试编写一个使用 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>

【问题讨论】:

  • 对不起,我需要的输出是:
    enquiry@gis.nottscc.gov.uk

标签: c# xml wcf xmlserializer xml-attribute


【解决方案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>

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

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

【讨论】:

  • 是的,谢谢,我就是这么想的!只需要习惯大量的类创建!
  • 如果此答案解决了您的问题,请将其标记为答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多