2017-08-01 125 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

**更新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内的列表项,不只是一个......我可以有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 ==“科幻”部分。为什么需要?如果我不知道程序中的任何类别名称会发生​​什么?是的,我需要通过他们循环,并打印所有的人。所以如果有100个类别,我需要打印所有的类别,以及其他所有类型(书籍,类型,过道...等) – aiden87

+0

x.name ==“科幻” - 即寻找特定名称类别。 – raichiks

+0

让我调试,看看会发生什么 – aiden87

相关问题