使用WCF ResponseFormat = WebMessageFormat.Json时忽略类的属性

时间:2011-10-19 02:22:30

标签: c# wcf json

我使用这种格式使用WCF进行JSON服务:

[OperationContract]
[ServiceKnownType(typeof(ComplexResult))]
[WebInvoke(
            Method = "GET",
            BodyStyle = WebMessageBodyStyle.Bare,
            ResponseFormat = WebMessageFormat.Json)]
MyClass MyFunction(string myParams);

这很有效,但它有一定的局限性。我无法忽略我的类序列化为JSON的属性。如果我使用JavaScriptSerializer类,那么我可以将[ScriptIgnore]属性放在我想忽略的属性上,并且它们不会在JSON中被序列化,但是这不适用于上面的方法。

有没有办法使用ResponseFormat Json方法排除被序列化为JSON的类的属性?

1 个答案:

答案 0 :(得分:11)

默认情况下,WCF使用DataContractJsonSerializer来序列化对象。根据{{​​1}}的定义方式,您可以使用不同的属性来阻止成员序列化:

  • 如果MyClass没有任何属性(即,它是“POCO”类型),您可以在不想序列化的成员中使用MyClass属性
  • 如果MyClass装饰有[IgnoreDataMember],您可以在这些成员中使用[Serializable]属性
  • 如果MyClass装饰有[NotSerialized],那么您只需不将 [DataContract]添加到您不想序列化的成员。