【问题标题】:JSON serializer and CSLA objectsJSON 序列化程序和 CSLA 对象
【发布时间】:2010-09-01 17:50:36
【问题描述】:

我们刚刚启动了一个新的 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 添加到类中,那么它可以工作,但不能在属性上。但是,我们确实希望对某些属性进行序列化。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net vb.net web-services json


    【解决方案1】:

    您应该为所有不应序列化的属性使用ScriptIgnore 属性。

    如果您决定对数据序列化进行更多自定义,例如,将一个属性名称替换为另一个属性名称或转换数组中的某些属性等等,您可以编写一个小的 JavaScriptTypeResolver 来完成。

    【讨论】:

    • 我今天要试试这个!谢谢奥列格!我会告诉你的。
    • 看起来像描述的那样工作。顺便说一句,我们发现我们需要添加对 System.Web.Extensions 的引用。感谢您的帮助!
    【解决方案2】:

    ScriptIgnore 应该按照 Oleg 的建议为您完成这项工作。查看此link 以获取详细示例

    【讨论】:

      【解决方案3】:

      您可以尝试在属性上放置一个 NonSerializedAttribute,不确定它是否适用于 Json 序列化程序...

      编辑:如果您使用的是 .net 4.0,您可以尝试使用 ISerializable 接口...

      【讨论】:

      • 我会试一试。我会告诉你的。
      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 2011-08-14
      • 1970-01-01
      相关资源
      最近更新 更多