744 votes

Comment puis-je désérialiser JSON à un simple dictionnaire<string,string> dans ASP.NET ?</string,string>

J'ai une simple clé/valeur de la liste en JSON renvoyé à ASP.NET par la POSTE. Exemple:

{ "key1": "value1", "key2": "value2"}

JE N'ESSAIE PAS DE DÉSÉRIALISER EN FORTEMENT TYPÉES .NET DES OBJETS

J'ai simplement besoin d'un bon vieux Dictionnaire(String, String), ou l'équivalent (table de hachage, Dictionnaire(String, Object), de la vieille école StringDictionary--l'enfer, un 2-D tableau de chaînes de caractères pourrait fonctionner pour moi.

Je peux utiliser tout ce qui est disponible dans ASP.NET 3.5, ainsi que le populaire Json.NET (je suis déjà en utilisant pour la sérialisation pour le client).

Apparemment, aucun de ces JSON bibliothèques ont ce front-gifles évidente de la capacité de la boîte, ils sont totalement axés sur la réflexion de la désérialisation via forte contrats.

Des idées?

Limitations:

  1. Je ne veux pas mettre en œuvre mon propre parseur JSON
  2. Ne pouvez pas utiliser ASP.NET 4.0 encore
  3. Préférez rester à l'écart de la plus ancienne, obsolète ASP.NET la classe JSON

974voto

James Newton-King Points 13880

Json.NET pour cela...

Autres exemples : Sérialisation des Collections avec Json.NET

104voto

Crispy Points 756

J’ai découvrir .NET a construit de façon à monter la chaîne JSON en un via la type de 3.5 l’Assemblée. Utilisez la méthode .

Je suis tombé sur ceci en faisant un ajax post (via jquery) du type de contenu « application/json » vers un statique .net Page méthode et vu que la méthode (qui a un paramètre unique du type `` ) comme par magie a reçu ce dictionnaire.

51voto

JP Richardson Points 11920

Pour les recherches sur internet et trébuchant sur ce post, j’ai écrit un blog sur comment utiliser la classe JavaScriptSerializer.

Lire la suite... http://procbits.com/2011/04/21/Quick-JSON-serializationdeserialization-in-c/

Voici un exemple :

42voto

PvH Points 171

Essayé de ne pas utiliser n’importe quelle implémentation de JSON externe donc je sérialisés comme ceci :

41voto

Dasun Points 605

J'ai eu le même problème j'ai donc écrit ce mon auto. Cette solution se distingue des autres réponses, car il peut désérialiser à plusieurs niveaux.

Envoyez simplement de chaîne json à deserializeToDictionary fonction, il sera de retour non fortement typées Dictionary<string, object> objet.

private Dictionary<string, object> deserializeToDictionary(string jo)
{
    var values = JsonConvert.DeserializeObject<Dictionary<string, object>>(jo);
    var values2 = new Dictionary<string, object>();
    foreach (KeyValuePair<string, object> d in values)
    {
        if (d.Value.GetType().FullName.Contains("Newtonsoft.Json.Linq.JObject"))
        {
            values2.Add(d.Key, deserializeToDictionary(d.Value.ToString()));
        }
        else
        {
            values2.Add(d.Key, d.Value);
        }
    }
    return values2;
}

Ex: Ce sera le retour de Dictionary<string, object> objet d'un Facebook réponse JSON.

private void button1_Click(object sender, EventArgs e)
{
    string responsestring = "{\"id\":\"721055828\",\"name\":\"Dasun Sameera Weerasinghe\",\"first_name\":\"Dasun\",\"middle_name\":\"Sameera\",\"last_name\":\"Weerasinghe\",\"username\":\"dasun\",\"gender\":\"male\",\"locale\":\"en_US\",  hometown: {id: \"108388329191258\", name: \"Moratuwa, Sri Lanka\",}}";
    Dictionary<string, object> values = deserializeToDictionary(responsestring);
}

Remarque: ville natale de plus amples deserilize en Dictionary<string, object> objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X