7
votes

JSON.NET: Desérialisez les tableaux JSON

J'essaie de traiter une structure JSON avec json.net et rencontré des problèmes:

Mes cours ne fonctionnent pas quand un JSON contient un tableau sans nom. P>

EXEMPLE JSON : strong> p> xxx pré>

classe pour json.net:le > Mon code: strong> p>

var myObject = JsonConvert.DeserializeObject<CAKR.Graph.Measurement>(MyJsonString);


4 commentaires

Voici un bon lien à utiliser à l'avenir pour valider si votre JSON est valide ou non JSON Lint


Ne devriez-vous pas travailler avec une catégorie pas un espace de noms cakr.graph.Mesure n'est pas une classe


Dupliqué possible de ne peut pas désérialiser le tableau JSON dans le type - JSON.NET


@DJ KRAZE: Le JSON est valide, il n'y a pas de duplication et de "mesure" est une classe dans l'espace de noms "CAKR.GRAPH". THX pour vos commentaires quand même =)


4 Réponses :


4
votes

Vous êtes presque là. Il suffit d'utiliser xxx

au lieu de xxx


1 commentaires

C'est ce que je pensais au début. Mais l'objet de mesure continue d'être "null" pour une raison quelconque.



2
votes

Tout d'abord, vous n'avez pas vraiment besoin de nommer toutes les propriétés de votre classe exactement comme elles sont présentées dans myjsRonstring . Vous pouvez utiliser JSONProperty Attribut et décorer vos propriétés de classe.

Une autre chose est si vous souhaitez désérialiser une partie de votre myjsRonstring Mesure < / Code>, vous devez fournir un type T correct pour la méthode de désérialisze (dans votre cas, il est iEnumerable .

Le code suivant devrait aider: xxx


1 commentaires

Merci jevgenij! Cela m'a vraiment eu sur quelque chose.



9
votes

Alors je me suis battu depuis un certain temps pour que cela fonctionne. Cependant, à la fin de la solution n'est pas si difficile. Espérons que, avec ma réponse, je vais aider certaines personnes.

La solution dans mon cas était p>

  1. Installez JSON.NET dans votre projet à l'aide de NU.GET LI>
  2. Faites de votre objet JSON, y compris celui de la matrice, etc. Assurez-vous que le format de l'objet est correct! Exemple ... Li> ol>

    {"producthetail": [ p>

    using Project.Details; //<-- this is my ViewModel namespace name
    using Newtonsoft.Json;
    using System.IO;
    using System.Threading.Tasks;
    
    namespace WebApplication.Controllers
    {
        public class JSONController : Controller
        {
            //
            // GET: /JSON/
            public async Task<ActionResult> Index()
            {
                StreamReader file = new StreamReader("C:\\Users\\YourName\\etc\\File.json");
                String json = await file.ReadToEndAsync();
    
                var Project = JsonConvert.DeserializeObject<RootObject>(json);
    
                return View();
            }
        }
    }
    


1 commentaires

Je veux obtenir la valeur clé et la valeur ... Est-ce que cela fait cela? Merci



0
votes

J'utilise une méthode très simple pour désérialiser les matrices JSON. Au lieu d'utiliser une tonne de classes publiques avec de nombreuses variables publiques. Je viens d'utiliser un objet dynamique et passez JSON comme objet à jsonconvert.deserializeObject.

Voici comment cela fonctionnerait. Dis que j'ai le JSON suivant: p> xxx pré>

je peux passer la chaîne json à la jsonconvert.deserializeObject. P> xxx pré>

puis en utilisant L'élément dynamique qui vient de créer je peux collecter des données JSON comme. P> xxx pré>

Si vous avez un tableau à l'intérieur de votre JSON, vous pouvez utiliser P>

using (var client = new WebClient())
        {
            string json = client.DownloadString(url);
            string output = json.ToString();

            dynamic outputArray = JsonConvert.DeserializeObject(output);

            string _age = outputArray.age;
            string appID = outputArray.data.app_id;

            Debug.Write(outputArray.Something); //Just match value of json        
        }


1 commentaires

mauvais exemple dès que votre JSON n'est pas un tableau, juste un objet