Introduzione:eccezione JsonMaxLength sulla deserializzazione grande json oggetti
applicazione Web, ASP.NET MVC 3, un'azione di controllo che accetta un'istanza della classe POCO modello con (potenzialmente) campo grande.
classeModello:
public class View
{
[Required]
[RegularExpression(...)]
public object name { get; set; }
public object details { get; set; }
public object content { get; set; } // the problem field
}
Action Controller:
[ActionName(...)]
[Authorize(...)]
[HttpPost]
public ActionResult CreateView(View view)
{
if (!ModelState.IsValid) { return /*some ActionResult here*/;}
... //do other stuff, create object in db etc. return valid result
}
Problema:
Un'azione dovrebbe essere in grado di accettare grandi oggetti JSON (almeno fino a centinaia di megabyte in una singola richiesta e non è uno scherzo). Per impostazione predefinita, ho incontrato diverse restrizioni come httpRuntime maxRequestLength
ecc., Tutte risolte tranne MaxJsonLengh, il che significa che il valore predefinito di ValueProviderFactory per JSON non è in grado di gestire tali oggetti.
provato:
Impostazione
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647"/>
</webServices>
</scripting>
</system.web.extensions>
- non aiuta.
creare il mio personalizzato ValueProviderFactory come descritto nel @ risposta di Darin qui:
JsonValueProviderFactory throws "request too large"
- anche fallito perché non ho possibilità di utilizzare JSON.Net (per ragioni non tecniche) . Ho provato a implementare la corretta deserializzazione qui, ma a quanto pare è un po 'al di sopra della mia conoscenza (ancora). Sono stato in grado di deserializzare la mia stringa JSON su
Dictionary<String,Object>
qui, ma non è quello che voglio: voglio deserializzare i miei deliziosi oggetti POCO e usarli come parametri di input per le azioni.
Quindi, le domande:
- qualcuno conosce il modo migliore per superare il problema senza implementare universale personalizzato ValueProviderFactory?
- Esiste la possibilità di specificare per quale specifico controller e azione voglio utilizzare il mio valore personalizzatoProviderFactory? Se conosco l'azione in anticipo di quanto sarò in grado di deserializzare JSON in POCO senza molta codifica in ValueProviderFactory ...
- Sto anche pensando di implementare un ActionFilter personalizzato per quel problema specifico, ma penso che sia un po 'brutto.
Chiunque può suggerire una buona soluzione?
Ci sono molte persone che si occupano di questo argomento e questa è l'unica soluzione che ho trovato che funzionasse nella mia applicazione MVC4. Grazie! – stitz
Super! Funziona benissimo per legare oggetti JSON di grandi dimensioni. Per le richieste GET con un oggetto Json di grandi dimensioni sto utilizzando la classe qui: http://brianreiter.org/2011/01/03/custom-jsonresult-class-for-asp-net-mvc-to-avoid-maxjsonlength-exceeded -exception/ –
Se hai problemi a pubblicare strutture JSON di grandi dimensioni su un post ajax su MVC4 Controller, prova questo prima di qualsiasi altra cosa. Ho provato molti altri rimproveri senza fortuna e questo da solo mi ha salvato la settimana. Grazie mille @DarinDimitrov! –