2011-09-02 55 views
0

以下是接口定義。當返回類型是wcf安靜服務中的泛型類型時如何移除xml名稱空間

[OperationContract] 
[WebGet(UriTemplate = "FacebookData/?accessToken={accessToken}")] 
OperationResult<FacebookData> GetFacebookData(string accessToken); 

返回類型是OperationResult<FacebookData>,它是一個通用型

然後,我會得到XML像下面...

OperationResultOfFacebookDataNcCATIYq的xmlns:I =「HTTP://www.w3。組織/ 2001/XMLSchema的實例」

如何刪除命名空間,並重新命名XML元素爲‘OperationResult’

順便說一句,我已經設置Namesp王牌空

[DataContract(Namespace = "")] 
public class OperationResult<T> 

,但我認爲泛型類型會被每一個T.

+0

請縮進代碼空間。 – SLaks

回答

0

一種方法生成的類要做到這一點,是落實IDispatchMessageInspector - 這允許檢查和修改任何請求/應答內容,反正你想要/需要...

2

你可以做[DataContract(Name = "OperationResult")]但真正的泛型概念上不會混用RESTful服務的想法。

我建議創建一個新的類如class FacebookOperationResult : OperationResult<FacebookData> {}然後用它作爲你的返回類型。

+0

嗨,謝謝,[DataContract(Name =「OperationResult」)]正在爲設置xml元素名稱工作,FacebookOperationResult也可以解決名稱空間問題;但唯一的問題是該類具有系統泛型類屬性,即:列表或數組,即:int []; – Clover

0

刪除您需要創建自己的序列化程序以繞過由WCF完成的序列化的xmlns。

接口:

[ServiceContract] 
    public interface IService 
    { 
     [OperationContract] 
     [WebInvoke(UriTemplate = "ProcessMessage")] 
     AResponse ProcessMessage(ARequest content); 
    } 

服務: //改變行爲,以一個適合你

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
    public class Service : IService 
    { 
     public AResponse ProcessMessage(ARequest content) 
     { 
     //todo 
     } 
    } 

這裏談到的最重要的:四

[XmlRoot("My_Root", Namespace = "")] 
ARequest : IXmlSerializable 
{ 
    public string PropertyA { get; set; } 

     public System.Xml.Schema.XmlSchema GetSchema() 
     { 
      return (null); 
     } 

     public void ReadXml(System.Xml.XmlReader reader) 
     { 
      if (!reader.IsEmptyElement) 
      { 
       reader.ReadStartElement(); 
       PropertyA = reader.ReadElementString("PropertyA"); 
       reader.ReadEndElement(); 
      } 
     } 

     public void WriteXml(System.Xml.XmlWriter writer) 
     { 
      writer.WriteElementString("PropertyA", PropertyA); 

     } 

}