![](/img/trans.png)
[英]Why can't the 'NonSerialized' attribute be used at the class level? How to prevent serialization of a class?
[英]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.