代码之家  ›  专栏  ›  技术社区  ›  David Hedlund

linq to sql中的scriptIgnore

  •  3
  • David Hedlund  · 技术社区  · 14 年前

    我有一个linq-to-sql实体,我将通过WebService调用序列化并作为JSON返回。

    该实体上有一个我不希望序列化的属性。为此,一般有 [ScriptIgnore] 属性,如果手动将其添加到 designer.cs 文件。

    现在,由于设计器文件是自动生成的,所以我不希望手动编辑它,因为任何更改都很容易被覆盖。因此,我的问题是:是否有任何方法可以直接在DBML编辑器中对属性进行注释,以便在序列化时将其排除在外?

    如果答案是“否”;是否有比手动将属性设置为更整洁的解决方案? null 在序列化它之前,还是返回一个匿名类型,除了那个属性之外,其他类型相同?在mvc.net中,是否有任何方法可以将参数传递给 JSON() 方法来改变它的行为,也许?

    如果以前有人问过这个问题,我很抱歉-我希望这是一个常见的问题,但我找不到任何人喜欢它。

    3 回复  |  直到 12 年前
        1
  •  2
  •   Peter Mortensen Sumit Kumar    14 年前

    所有DBML生成的类都是部分类,因此您可以在另一个文件中扩展它们。DBML设计器将只更改 Designer.cs 文件。从DBML设计器中移除该属性,并将其放入另一个文件中的分部类中。然后,您可以添加任何您想要的额外属性,DBML设计器将不再使用它。您将不得不手动管理此属性并更新它以匹配任何数据库更改,但我认为如果它解决了您的问题,这可能是值得付出的代价。

        2
  •  1
  •   Community rcollyer    7 年前

    如果你没有成功 partial 类(这可能是最好的方法),然后您可以自己序列化日期。众所周知,ASP.NET MVC使用 JavaScriptSerializer 序列化数据。这个 Javascriptserializer公司 具有简单而漂亮的定制功能,如 JavaScriptConverter 你可以很容易地用一些不太标准的东西来转换对象(参见 use Attr tags for json? 例如或所有其他主题)。

    为了最符合标准,可以定义派生自 JsonResult (例如这里 ASP.net MVC returning JSONP http://dev.qsh.eu/Blogs/Dmitry-P/January-2010/ASP-NET-MVC-Tip--3.aspx )并将序列化数据保存到 context.HttpContext.Response 直接与A Write 方法。然后,您完全可以自由地将数据序列化为JSON。

        3
  •  0
  •   Gerfboy    12 年前

    您可以尝试进入DBML设计器并将属性的访问修饰符从public设置为internal,而不是使用上面的分部类答案。我在表到表的关系属性上做了这项工作,这样做可以在将对象序列化到JSON时消除循环引用。