2012-05-15 36 views
0

我正在嘗試編寫使用XmlSerialzer輸出xml的WCF服務。我需要一個特定的XML輸出,這就是爲什麼我不使用DataContract Seriailzer。具體來說,我正在寫一個目錄服務網站(CSW),它有一個定義的模式等使用XMLSerializer將屬性添加到類成員

我一直在試圖寫類,然後測試什麼XML輸出。這很枯燥,我可能會切換到xsd工具。我想知道的是,我可以向其他類成員添加xml屬性,還是僅將這些裝飾的xmlattributes添加到根元素,即類名?與使用XDocument手動編寫CML相比,似乎存在靈活性問題。每次我需要嵌套元素(而不是集合)似乎我需要創建一個新的類?是對的嗎?

輸出XML我需要的是:

<ows:ContactInfo> 
<ows:OnlineResource 
    xlink:href="mailto:­­[email protected]­­"/> 
</ows:ContactInfo> 

這裏是我的類:

public class ContactInfo 
     { 
      [XmlElement] 
      public string OnlineResource = "";   

      [XmlElementAttribute(ElementName = "OnlineResource",Namespace = "http://www.w3.org /1999/xlink")] 
      public string href = "mailto:[email protected]"; 

     } 

其如下輸出XML:

<ows:ContactInfo xlink:href="mailto:[email protected]"> 
<ows:OnlineResource>mailto:[email protected]</ows:OnlineResource> 
</ows:ContactInfo> 
+0

抱歉,我所需要的輸出是: [email protected] Euston

回答

2

你需要改變你的對象模型,使這種情況發生...嘗試像這樣...

[XmlType("ContactInfo")] 
public class ContactInfo 
{ 
    [XmlElement("OnlineResource")] 
    public OnlineResource Resource { get; set; } 
} 

[XmlType("OnlineResource")] 
public class OnlineResource 
{ 
    [XmlAttribute("href")] 
    public string href = "mailto:[email protected]"; 
} 

輸出這是...

<ContactInfo> 
    <OnlineResource href="mailto:[email protected]" /> 
</ContactInfo> 

當然,你需要調整,讓您的命名空間等,但,這是在朝着正確的方向...希望它有助於:)

是當你嵌套元素,你將需要一個新的類......這是有道理的?基元如何產生一組嵌套值?

+0

是的,謝謝你,這就是我的想法!只需要習慣很多課堂創作! – Euston

+0

如果此答案解決了您的問題,請將其標記爲答案:) – iDevForFun