簡體   English   中英

為什么我不能在Wcf對象中指定NonSerialized

[英]Why can't I specify NonSerialized in Wcf object

我有這樣的課程。

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

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

我有一個Wcf Web服務,當調用該方法時,將對象加載到Request對象中,並且我不希望傳入的Request修改Type屬性。 我嘗試將class屬性設置為

[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; }
    }
}

但是在兩種情況下,我都收到錯誤消息“ NonSerialized”在此聲明類型上無效。 它僅對“字段”聲明有效。

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
 }

我該如何克服這個問題?

因為WCF包括一個新的serialization engine所以DataContractSerializer

更明確

  • 如果將類標記為[DataContract] ,則僅考慮標記為[DataMember]的成員

  • 如果class未標記為[DataContract] ,則它默認為所有內容(以支持POCO),但是您可以使用[IgnoreDataMember]減去成員

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM