Ho un'azione controller che deve ricevere un numero intero e un oggetto, contenente varie proprietà, una delle quali è un elenco generico di oggetti. Quando pubblico JSON sull'azione con una lista popolata, tutto viene mappato correttamente e ottengo una lista contenente l'oggetto che ho postato. Se la matrice è vuota, tuttavia, l'azione MVC associa la proprietà a un intead nullo di una lista vuota. Voglio che l'array vuoto sia mappato su un array vuoto e non su un null, in quanto l'array vuoto in questo caso significa che non c'è nulla nella collezione, e un null significa che il database dovrebbe essere controllato per vedere se c'è qualcosa in precedenza salvato nella raccolta, ma non riesco a capire cosa ho bisogno di cambiare per farlo mappare correttamente. Stiamo utilizzando Json.Net per eseguire la serializzazione degli oggetti per la restituzione di oggetti, ma non penso che venga utilizzato per la deserializzazione degli oggetti sul binding dei modelli.JSON empty array deserializing null in MVC
oggetti vengono passati:
public class ObjectInList
{
public decimal Value1 { get; set; }
public decimal Value2 { get; set; }
}
public class Criteria
{
public decimal? ANullableNumber { get; set; }
public IList<ObjectInList> ObjectsList { get; set; }
}
JSON richiesta: "{\" id \ ": 137, \" criteri \ ": {\" ObjectsList \ ": []}}"
azione controller:
public ActionResult ProcessCriteria(int id, Criteria criteria)
{
return Json(_service.ProcessCriteria(id, criteria));
}
E 'in azione di controllo che sto ottenendo un null al posto di una lista vuota nei criteri oggetto. Succede se invio valori null per le altre proprietà o no. Non sei sicuro se sia l'oggetto essere un IList e non un IEnumerable? (Il metodo Json che avvolge la chiamata di servizio è il nostro wrapper per restituire un risultato json utilizzando Json.Net per serializzare la risposta: il null è nell'oggetto criteri ricevuto, non nel ritorno.)
Sto supponendo che sia qualcosa piuttosto semplice che mi manca, ma non riesco a capire cosa, ogni aiuto è molto apprezzato.
È più facile per noi se inserisci del codice. Una riga di codice è migliore di 100 parole: D –
Concordato, tuttavia in questo caso, non sono sicuro di quanto possa essere d'aiuto, a meno di postare l'intero controller/controller di base e i post json associati. Proverò a postare qualcosa che abbia un senso, ma fino ad allora, il json sta mostrando una matrice vuota, e prima che sia pubblicato e quando è legato al modello, la lista è una lista vuota piuttosto che vuota. Parti della gerarchia del controller sono state scritte da altri sviluppatori, quindi non posso dirlo con certezza, ma non riesco a trovare un'implementazione sovrascritta della deserializzazione di JSON, quindi penso che sia la gestione predefinita di JSON per il binding del modello. –
Controlla questa domanda: http://stackoverflow.com/q/14203150/29555 e la seconda risposta – marto