Envoyer un objet complexe en JSON à un controlleur
Salut à tous, j ai un problème dans l'envoie d'un objet Json constitué d'un autre objet Json , je récupère cette objet dans le controlleur mé j ai une exception "l' objet est null", voici le code :
code jQuery:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
function getDetails(s) {
var persmod = {
id: s, aa: { idadr: s }
};
$.ajax({
$.ajax({
type: "POST",
url: "PerDetails",
data: JSON.stringify(persmod),
contentType: "application/json",
dataType: "json",
success: function (msg) {
alert("Data:"+msg.nom+" "+msg.prenom,activite=sa.secteur_activ);
}
}); |
code controlleur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
[JsonFilter(Param = "prM", JsonDataType = typeof(PersonModel))]
public JsonResult PerDetails(PersonModel prM)
{
Personne per = new Personne();
secteurActivite sa = new secteurActivite();
per = perRep.getPersonne(prM.id);
sa = actRep.getActivite(prM.adm.idadr);
var data = new { nom=per.Nom, prenom=per.Prenom,activite=sa.secteur_activ};
return Json(data, JsonRequestBehavior.AllowGet);
} |
les classes sérialisées:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
[Serializable]
public class PersonModel
{
public int id { get; set; }
public AdressModel adm { get; set; }
}
[Serializable]
public class AdressModel
{
public int idadr { get; set; }
} |
le filtre Json :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public class JsonFilter : ActionFilterAttribute
{
public string Param { get; set; }
public Type JsonDataType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
{
string inputContent;
using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
{
inputContent = sr.ReadToEnd();
}
var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
filterContext.ActionParameters[Param] = result;
}
}
} |
Est ce que je peux récupérer un objet personne qui contient déjà un objet adresse ( un objet complexe)
et merci en avance :D