2017-08-01 5 views
-4

Je suis assez nouveau à JSON, en particulier la sérialisation et la désérialisation. J'ai JSON comme celui-ci, que j'ai d'abord sérialiser et mettre à l'intérieur de la variable. Maintenant, je veux obtenir des données sur cette variable.comment désérialiser json avec newtonsoft

{ 
    "timestamp": "2017-06-20 12:12:10", 
    "categories": 
[ 
    { 
     "name": "Fiction", 
    }, 
    { 
     "name": "Roman",  
    } 
] 
, 
    "types": 
[ 
    { 
     "name": "Long story", 
    }, 
    { 
     "name": "Short story",  
    } 
], 
    "books": 
[ 
    { 
     "title": "Song of ice and fire", 
     "bookNumber": "1234567", 
     "aisle": 
     [ 
      { 
       "location": "fiction isle", 
      }, 
      { 
       "location": "roman aisle", 
      } 
     ] 
    } 
] 
} 

stocké dans mon var JSON

** Mise à jour 1 **

public List<Books> listOfBooks() 
     { 
      var bookList = new List<Books> 
      { 
       new Books 
       { 
        title = "song of ice and fire" 
        bookNumber = "1234567", 
        aisle = listOfAisles()   
       } 
      }; 
      return bookList; 
     } 

public List<Aisle> listOfAisles 
{ 
     var aisleList = new List<Aisle> 
      { 
       new Aisle 
       { 
        location = "fiction aisle" 

       } 
      }; 
      return aisleList; 
} 

MainProgram registerBooks = new MainProgram(); 
     var obj = new MainProgram 
     { 
      Timestamp = "2017-06-20 09:10:55", 
      Books = listOfBooks(), 
      listOfAisles = listOfAisles(), 
      categories = listOfCategories(), 
      types = listofTypes() 
     }; 

var _myJson = new JavaScriptSerializer().Serialize(object); 

Books _books = JsonConvert.DeserializeObject<Books>(_myJson); 

string _time = _books.Timestamp; 

Quand je debug je reçois l'horodatage et le mettre dans _Heure et il fonctionne très bien ... mais quand je essayez d'obtenir d'autres éléments comme categories.name, je ne peux pas atteindre ces éléments.

Le problème est que je peux avoir de nombreux éléments de la liste dans ce JSON, pas seulement un ... Je pourrais avoir comme 100 catégories. comment récupérer ces objets?

Comment est-ce que je devrais faire ceci?

Merci!

modifier

public class Books 
{ 
    public string title {get;set;} 
    public string bookNumber {get;set;} 
    public List<aisle> aisles {get;set;} 
} 

PS - bas/majuscule n'est pas la question! c'est due la traduction en anglais

+0

Si vous faites Catégories _categories = JsonConvert.DeserializeObject (_myJson); Vous n'avez pas vos catégories? – JBO

+1

Et quelle est la classe de déclaration de livres? – raichiks

+0

voir edit please @raichiks – aiden87

Répondre

1

Les catégories sont liste dans une liste. Donc, si vous voulez les obtenir. Trouvez une catégorie spécifique par linq ou itérez foreach library et imprimez-les tous. Cela dépend des besoins.

Library library = JsonConvert.DeserializeObject<Library>(_myJson); 
//find category by name 
Category finddedCategory = library.categories.FirstOrDefault(x => x.name == "sci-fi"); 
//print out all names of categories 
foreach(Category c in library.categories) 
{ 
Console.Write(c.name); 
} 
+0

je pense que cela pourrait être ce que je cherche, mais je ne comprends pas la partie x.name == "science-fiction". pourquoi est-ce nécessaire? que se passerait-il si je ne connaissais aucun nom de catégorie dans le programme? et oui j'ai besoin de passer à travers eux et les imprimer tous. donc s'il y a 100 catégories, j'ai besoin de les imprimer toutes, et bien sûr tout le reste (livres, types, allées ... etc) – aiden87

+0

x.name == "science-fiction" - qui est de trouver un nom spécifique dans catégories – raichiks

+0

laissez-moi déboguer cela et voir ce qui se passe – aiden87