![](/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.