我们刚刚启动了一个新的ASP.Net项目,该项目使用Web服务将一些CSLA业务对象序列化为我们的客户端javascript / JQuery代码的JSON数据。在客户端浏览器(Firefox中的Firebug)中查看JSON数据后,我们注意到业务对象中存在大量不需要下载到浏览器的属性。
有没有办法将JSON序列化程序序列化的属性(除了标记为私有)排除?我们没有直接调用JSONSerializer,而只是在WebMethod中包含了一个ScriptMethod声明。
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
<WebMethod()> _
Public Function getQuestions()
更新 我们尝试了在公共属性上添加属性但收到错误的建议:
Error 25 Attribute 'NonSerializedAtrribute' cannot be
applied to 'Name' because the attribute is not valid
on the is declaration type.
现在,如果我们将NonSerialized添加到类中,那么它可以工作但不会在属性上。但是,我们确实希望序列化一些属性。
有什么想法吗?
答案 0 :(得分:3)
您应该对所有应该未序列化的属性使用ScriptIgnore属性。
如果您决定对数据序列化进行更多自定义,例如,将一个属性名称替换为另一个属性名称或者转换数组中的某些属性等等,您可以编写一个小JavaScriptTypeResolver来执行此操作。
答案 1 :(得分:1)
ScriptIgnore应该像Oleg一样为你工作。查看此link了解详细示例
答案 2 :(得分:0)
您可以尝试在属性上放置NonSerializedAttribute,但不确定它是否适用于Json序列化程序......
编辑:如果你使用.net 4.0,你可以尝试使用ISerializable接口......