在ASP.NET MVC中解析JSON文件并在网页中显示数据

ka2*_*2jm 2 c# asp.net-mvc parsing json

我有一个远程 URL,我从中读取了一个 JSON 对象,如下所示:

{"books":
 [
   {"title":"Book 1", "author":"Author1", "price":762, "inStock":15},
   {"title":"Book 2", "author":"Author2", "price":100, "inStock":1},
   {"title":"Book 3", "author":"Author3", "price":185.5, "inStock":5},
   {"title":"Book 4", "author":"Author 4", "price":1748, "inStock":3},
   {"title":"Book 5", "author":"Author 5", "price":999, "inStock":20},
   {"title":"Book 6", "author":"Author 6", "price":499.5, "inStock":3},
   {"title":"Book 7", "author":"Author 7", "price":564.5, "inStock":0}
 ]
}
Run Code Online (Sandbox Code Playgroud)

我创建了两个类 Book.cs

public class Book
{
    public string title;

    public string author;

    public string price;

    public string inStock;
}
Run Code Online (Sandbox Code Playgroud)

和 Books.cs

public class Books
{
    public IList<Book> books { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何正确解析 JSON 以便我可以在 Razor HTML 中显示内容

这是我的控制器:

public ActionResult Index()
{
    var webClient = new WebClient();
    var json = webClient.DownloadString(@"http://www.myurl.json");
    Books[] books = JsonConvert.DeserializeObject<Books[]>(json);

    return View(books);
}
Run Code Online (Sandbox Code Playgroud)

Rio*_*ams 6

您的Books类已经包含一个集合属性来表示您的每一本书,因此您不需要实际反序列化 aBooks[]而只是一个Books对象:

// Since Books is already a container element, it will map the "books" property
// from your JSON object to the matching IList<Book> property
var books = JsonConvert.DeserializeObject<Books>(json);
Run Code Online (Sandbox Code Playgroud)

例子

在此处输入图片说明

您可以在此处查看完整的工作示例以及以下代码段中演示的示例代码。

// Since Books is already a container element, it will map the "books" property
// from your JSON object to the matching IList<Book> property
var books = JsonConvert.DeserializeObject<Books>(json);
Run Code Online (Sandbox Code Playgroud)