繁体   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