我有一个班级;
[DataContract]
public class Request
{
[DataMember]
public int Id {get;set;}
[DataMember]
public UserType Type { get; set; }
}
我有一个Wcf webservice,当调用该方法时,将该对象加载到Request对象中,我不希望传入的Request修改Type属性。我尝试将类属性设置为
[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
}
我该如何克服这个问题?
答案 0 :(得分:3)
由于WCF
包含新的 serialization engine
DataContractSerializer
更明确
如果类被标记为[DataContract]
,则只会将标记为[DataMember]的成员视为
如果类未标记为[DataContract]
,则默认为所有内容(以支持POCO),但您可以使用[IgnoreDataMember]