Je transmets json de ma vue à mes actions de contrôleur pour effectuer des opérations. Pour convertir le JSON envoyé en, à un POCO J'utilise ce filtre d'action:Relier l'application/json à l'objet POCO dans asp.net mvc, exception de sérialisation
public class ObjectFilter : ActionFilterAttribute {
public Type RootType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext) {
IList<ErrorInfo> errors = new List<ErrorInfo>();
try {
object o = new DataContractJsonSerializer(RootType).ReadObject(filterContext.HttpContext.Request.InputStream);
filterContext.ActionParameters["postdata"] = o;
}
catch (SerializationException ex) {
errors.Add(new ErrorInfo(null, ex.Message));
}
finally {
filterContext.ActionParameters["errors"] = errors.AsEnumerable();
}
}
Il utilise le DataContractJsonSerializer pour cartographier le JSON, à mon objet. Mon action est ensuite décorée comme ceci:
[ObjectFilter(RootType = typeof(MyObject))]
public JsonResult updateproduct(MyObject postdata, IEnumerable<ErrorInfo> errors) {
// check if errors has any in the collection!
}
donc conjecturer, ce qui se passe ici, s'il y a un problème de sérialisation JSON au type d'objet (si une chaîne ne peut pas être analysée comme un type décimal ou similaire pour eg), il ajoute l'erreur à une collection, puis transmet cette erreur à la vue. Il peut alors vérifier si cette collection a des erreurs et rendre compte au client.
Le problème est que je ne peux pas sembler savoir quel champ a causé le problème. Idéalement, je voudrais revenir à la vue et dire "ce domaine" avait un problème. La classe SerializationException ne semble pas offrir ce genre de flexibilité.
Comment le collectif SO hivemind pourrait-il envisager de s'attaquer à ce problème?
Cela se passe déjà via un post de formulaire ajax. – ChadT
Ensuite, vous ne devriez pas avoir besoin de changer les données de publication à JSON. Il suffit de laisser les données de poste dans le corps de la requête http. –
Malheureusement, ce n'est pas aussi simple que ça. – ChadT