2010-11-22 1 views
2

Quelque chose que je suis source de confusion. Le Javascript va produire les données JSON suivantes.Existe-t-il un moyen de passer une liste d'objets JSON de JS à C#?

{type:"book"  , author: "Lian", Publisher: "ABC"} 
{type:"Newspaper", author: "Noke"} 

Ceci est seulement un exemple, en fait j'ai plus que cela.

Étant donné que j'ai des champs communs entre différentes données JSON, je ne sais pas s'il est possible de transmettre ceci à C# en même temps. Ce que je veux faire, c'est passer à C# puis faire un peu de traitement, quelle est la meilleure façon de faire? J'utilise ASP.NET MVC2.

Merci pour votre réponse ou conseils.

+0

Vos deux objets un peu similaire, pensez-vous que vous pouvez créer une classe commune qui serait utilisée comme un transfert de données? Vous pouvez ensuite transmettre toutes les données de tous les types dans un tableau et utiliser le type filed pour déterminer comment traiter le côté du serveur de données. – Zachary

+0

Voulez-vous dire créer une classe JS ou une classe C#?Il y a plus de champs différents entre eux. Le script va produire 5 types d'objets différents, qui n'ont que 2 champs identiques. – user469652

+0

Le côté serveur les prendra et produira le document MS Word et retournera le fichier. – user469652

Répondre

3

La combinaison des 2 instructions JSON ci-dessus ne sont pas ensemble JSON valide.Cela étant dit, vous ne pourrez pas utiliser la classe JavaScriptSerializer désérialiser ces données dans C# structure directl y. Au lieu de cela, vous devrez d'abord faire un peu d'analyse manuelle, soit pour le décomposer en JSON valide, soit simplement pour l'analyse manuelle.

Ce que je recommanderais, en réalité, c'est d'envoyer un JSON valide à la place. Vous pouvez accomplir ceci en faisant quelque chose comme ceci:

{list: [ 
    {type:"book"  , author: "Lian", Publisher: "ABC"}, 
    {type:"Newspaper", author: "Noke"} ] 

Difficile de dire exactement, puisque vous seul connaissez les détails de votre cas d'utilisation. Vous pouvez envoyer ces données via une requête traditionnelle 'ajax'. C'est très facile à faire avec n'importe laquelle des nombreuses bibliothèques JS, mais je recommanderais d'y aller quand même - elles offrent des constructions de plus haut niveau qui sont plus faciles à utiliser (et traitent les idiosyncrasies de plusieurs navigateurs).

Étant donné que vous utilisez ASP.NET MVC2, je recommanderais jQuery. Microsoft soutient maintenant jQuery comme leur bibliothèque JS de choix et la rend même par défaut pour les nouveaux projets Web.

Une fois que vous passez le JSON ci-dessus pour C#, vous pouvez désérialiser en faisant quelque chose comme ceci:

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
var result = serialzer.Deserialize<Dictionary<string, object>>(postedJSONData); 

Votre résultat sera alors une structure qui ressemble à ceci, en C#:

Dictionary<string, object> result => 
    { "list" => object }, 
       object => List<object>, 
          List<object> => Dictionary<string, object> 
              { "type" => "book", "author" => "Lian" } // etc 
2
[ 
    {type:"book"  , author: "Lian", Publisher: "ABC"}, 
    {type:"Newspaper", author: "Noke"} 
] 

Est-ce encore JSON valide (bien en fait les clés doivent être enfermés dans "aussi bien), de sorte que vous pouvez .push() dans un tableau à chaque fois que vous créez un enregistrement JSON.

var list = []; 
// code doing other stuff 
list.push({type:"book"  , author: "Lian", Publisher: "ABC"}); 
// more code doing other stuff 
list.push({type:"Newspaper", author: "Noke"}) 

Une fois votre JSON La liste est construite, vous pouvez envoyer cette liste au backend en une seule fois

0

Vous pouvez également utiliser JavaScriptSerializer pour désérialiser votre propre type personnalisé. Esentially vous faites un type très simple avec toutes les propriétés de vos objets JSON puis appelez

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
MyType result = serialzer.Deserialize<MyType>(JsonData); 

Vous pouvez également désérialiser un tableau

MyType[] result = serialzer.Deserialize<MyType[]>(JsonData); 
Questions connexes