2017-08-01 16 views
-4

私はJSON、特に直列化と逆シリアル化を初めて学びました。私はこのようなJSONを持っています。これは最初にシリアル化して変数に入れます。今私はこの変数からデータを取得したい。 newtonsoftでjsonを逆シリアル化する方法

{ 
    "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", 
      } 
     ] 
    } 
] 
} 

は私のvar JSONに保存されている

** UPDATE 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; 

私はデバッグするとき、私は...タイムスタンプを取得し、_timeでそれを入れて、それが正常に動作しますが、ときに私がcategories.nameのような他の項目を取得しようとすると、それらの項目に到達できません。

問題は私がこのJSONの中に多くのリスト項目を持っている可能性があります.1つだけではありません...私は100のカテゴリのようにすることができます。それらのアイテムを元に戻す方法は?

どうすればよいですか?

ありがとうございました!

編集

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

PS - 下/大文字は問題ではありません!英語に翻訳されます

+0

カテゴリ_categories = JsonConvert.DeserializeObject (_myJson); カテゴリがありません。 – JBO

+1

そしてBooksクラスの宣言は何ですか? – raichiks

+0

編集してください@raichiks – aiden87

答えて

1

カテゴリはリスト内のリストです。あなたがそれらを手に入れたいならば。 linqで特定のカテゴリを探したり、foreachライブラリを繰り返してそれらをすべて印刷します。必要に応じて。

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

これは私が探しているかもしれないと思うが、私はx.name == "SFの"部分を理解していない。それはなぜ必要なのですか?私がプログラムでカテゴリ名を知らなかったらどうなるの?はい、私はそれらをループし、それらのすべてを印刷する必要があります。もし100のカテゴリがあれば、私はそれらのすべてを印刷しなければならず、残っているすべての残りのもの(書籍、タイプ、通路など...) – aiden87

+0

x.name == "sci-fi"カテゴリ。 – raichiks

+0

私はそれをデバッグさせ、何が起こるかを見てください – aiden87

関連する問題