有没有一种方法可以使JavaScriptSerializer忽略某些通用类型的属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有一种方法可以使JavaScriptSerializer忽略某些通用类型的属性?相关的知识,希望对你有一定的参考价值。

我正在为模型使用实体框架,并且需要将它们序列化为JSON。问题是EF包含了所有这些非常好的导航集合(例如,我的User模型具有Orders属性),当我序列化这些对象时,序列化程序会尝试获取这些集合的值,而EF则大喊大叫尝试使用已处置的上下文

ObjectContext实例已被处置,不能再用于需要连接的操作。

[我知道我可以用[ScriptIgnore]装饰属性,以使序列化程序不理会它们,但这就是EF的问题,因为它会生成这些属性的代码。

是否有办法使序列化程序不对通用类型为EntityCollection <>的属性进行序列化?

或者,还有一种方法可以使用另一个健壮的JSON库(例如JSON.Net?)>

我正在为模型使用实体框架,并且需要将它们序列化为JSON。问题是EF包含了所有这些非常好的导航集合(例如,我的User模型具有...

答案

您可以声明一个自定义合同解析器,该解析器指示要忽略的属性。这是基于the answer I found here的通用“可忽略”:

另一答案

如果仅是将这些对象返回给客户端,为什么不使用匿名类仅返回需要的内容呢?

另一答案

这是我的小贡献。 @drzaus答案的一些更改。说明

另一答案

添加到@drzaus's answer,我修改了IsIgnored方法以使其更通用-

另一答案

如果使用JSON.NET,则可以使用JsonIgnore之类的属性来忽略某些属性。在序列化通过NHibernate加载的对象时,我会使用此功能。

以上是关于有没有一种方法可以使JavaScriptSerializer忽略某些通用类型的属性?的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种快速的方法可以只使用一种元素来制作向量的向量?

有没有一种方法可以预测 .doc 的大小?

有没有一种简单的方法可以在 C# 中创建序数?

有没有一种简单的方法可以在节点模块中加载 json?

有没有一种方法可以动态添加伪元素 css 作为内联 css

有没有一种简单的方法可以使 html textarea 和 input type text 一样宽?