Passer un objet json dynamique au contrôleur C # MVC
Je suis travailler avec .Net 4, MVC 3 et jQuery v1.5
J'ai un objet JSON qui peut changer en fonction de la page qui l'appelle. J'aimerais passer de l'objet à un contrôleur.
{ id: 1, title: "Some text", category: "test" }
Je comprends que si je créer un modèle personnalisé comme
[Serializable]
public class myObject
{
public int id { get; set; }
public string title { get; set; }
public string category { get; set; }
}
et l'utiliser dans mon contrôleur
public void DoSomething(myObject data)
{
//do something
}
et de passer de l'objet à l'aide de jQuery .ajax méthode comme ceci:
$.ajax({
type: "POST",
url: "/controller/method",
myjsonobject,
dataType: "json",
traditional: true
});
Cela fonctionne très bien, mon objet JSON est mappé à mon objet de C#. Ce que je voudrais faire est de passer par un objet JSON qui est susceptible de changer. Quand ça change, je ne veux pas avoir à ajouter des articles à mon modèle C#, chaque fois que l'objet JSON changements.
Est-ce réellement possible? J'ai essayé les objets de mappage d'un Dictionnaire, mais la valeur de données serait tout simplement finir par être null.
Grâce
source d'informationauteur Gareth Hastings
Vous devez vous connecter pour publier un commentaire.
Sans doute l'action qui accepte une entrée est utilisée uniquement pour cet usage particulier de sorte que vous pouvez simplement utiliser le
FormCollection
objet et ensuite tous vos json propriétés de votre objet sera ajouté à la chaîne de collecte.Vous pouvez soumettre JSON et l'analyse dynamique si vous utiliser un wrapper de la sorte:
JS:
C#, InputModel:
C#, Contrôleur de l'action:
Ennuyeux pour ajouter le wrapper sur le JS, mais simple et nettoyez-les si vous pouvez obtenir passé.
Mise à jour
Vous devez également passer de l'un à Json.Net comme la valeur par défaut parser JSON dans l'ordre pour que cela fonctionne; dans MVC4 pour quelque raison que ce soit, ils ont remplacé presque tout avec Json.Net à l'exception de Contrôleur de la sérialisation et la désérialisation.
Ce n'est pas très difficile de suivre cet article:
http://www.dalsoft.co.uk/blog/index.php/2012/01/10/asp-net-mvc-3-improved-jsonvalueproviderfactory-using-json-net/
À l'aide d'un custom ModelBinder, vous pourriez recevoir une JsonValue comme un paramètre d'action. Ce serait essentiellement vous donner un typées dynamiquement objet JSON qui peut être créé sur le client quelle que soit la forme que vous souhaitez. Cette technique est décrite dans cette blog.
Une autre solution est d'utiliser un type dynamique dans votre modèle. J'ai écrit un billet de blog sur la façon de se lier à des dynamiques à l'aide d'un ValueProviderFactory http://www.dalsoft.co.uk/blog/index.php/2012/01/10/asp-net-mvc-3-improved-jsonvalueproviderfactory-using-json-net/