[英]How to make a query limit 1 linq C# MongoDB (ASP.NET MVC)
[英]how to extend the limit of RecursionLimit in C# asp.net MVC
在ASP.NET MVC中,当我尝试通过JSON将数据发送到浏览器时,我得到了异常RecursionLimit。
无论JSON有多大,我怎么能让它发挥作用。
RecursionLimit
属性的默认值为100,这意味着它可以序列化嵌套到相互引用的100个对象的深度的对象。
我无法想象您实际上有嵌套深度的对象,因此错误消息的最可能原因是您有一个对象包含对自身的引用,或者两个对象相互引用。 由于这会导致无限的子对象链,因此您将获得序列化程序中堆栈溢出的等效值。
您可以在忽略这些属性时JSON序列化递归引用自身的对象。 我的用户类有一个也是用户对象的属性,但我忽略该属性:
Users oSuperior;
[ScriptIgnore(), XmlIgnore()]
public Users Superior
{
get
{
if (oSuperior == null)
{
oSuperior = new Users();
if (iIDUserSuperior > 0)
oSuperior.Load(iIDUserSuperior);
}
return oSuperior;
}
}
似乎Microsoft已经为JsonResult类添加了一些有用的属性,以增加.NET Framework 4.5中的递归限制和最大JSON长度:
public ActionResult GetJson()
{
var result = Json(obj);
result.RecursionLimit = 1024;
result.MaxJsonLength = 8388608;
return result;
}
因此,现在您可以通过设置这些属性轻松设置您希望允许JSON对象的“大”。
由于以下配置在ASP.NET MVC中似乎无用:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization recursionLimit="1024"/>
</webServices>
</scripting>
</system.web.extensions>
我最终使用以下一个班轮来解决我的问题:
new System.Web.Script.Serialization.JavaScriptSerializer(){RecursionLimit = 1024}.Serialize(@Model)
而不是使用默认递归限制为100的MVC序列化方法:
Json.Encode(@Model)
它可能不是最好的解决方案,但如果您需要快速修复,它确实很简单。
除了前面提到的方法,您可以使用Json.NET提供的默认JSON序列替换默认的JSON序列, 默认情况下似乎没有明确的限制 :
空值表示没有最大值。 默认值为null。
例如:
JsonConvert.SerializeObject(theObject);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.