![](/img/trans.png)
[英]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.