2014-03-07 51 views
0

我有一個類,爲什麼我不能在WCF對象中指定NonSerialized

[DataContract] 
public class Request 
{ 
    [DataMember]   
    public int Id {get;set;} 

    [DataMember] 
    public UserType Type { get; set; } 
} 

我有一個WCF web服務,當方法被調用,加載對象到Request對象,我不希望傳入的請求修改類型屬性。我試圖將類屬性爲

[DataContract] 
public class Request 
{ 
    [DataMember] 
    public int Id {get;set;} 

    [NonSerialized] 
    [DataMember] 
    public UserType Type { get; set; } 
} 

,我也試過

[DataContract] 
public class Request 
{ 
    [NonSerialized] 
    private UserType _type; 

    [DataMember] 
    public UserType Type 
    { 
     get { return _type; } 
     set { _type = value; } 
    } 
} 

但在這兩種情況下,我發現了錯誤「屬性‘非序列化’是不會在這個聲明類型有效。它只對'field'聲明有效。

Wcf服務中的Request對象被加載爲;

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "/XML/GetTypes", 
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)] 
XElement XMLGetTypes(Request oRequest) 
{ 
    ...do something with the object 
} 

或這取決於端點

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "/JSON/GetTypes", 
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] 
string JSONGetTypes(Request oRequest) 
{ 
    ...do something with the object 
} 

我怎樣才能解決這個問題?

+0

請求類DataContract?你在哪裏創建Request對象併爲其賦值? – danish

+0

我更新了我的問題以顯示我如何分配/創建對象 – Tommassiov

回答

3

由於WCF包括一個新的serialization engineDataContractSerializer

爲了更明確的

  • 如果類被標記爲[DataContract],則只有成員標記爲[數據成員]被認爲是

  • 如果類沒有標記爲[DataContract],那麼它默認爲所有內容(以支持POC O),但是您可以使用[IgnoreDataMember]減去成員

+0

我檢查了,我需要使用[IgnoreDataMember] – Tommassiov

相關問題