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

C# 在ASP.NET MVC中解析JSON文件并在网页中显示数据,c#,json,asp.net-mvc,parsing,C#,Json,Asp.net Mvc,Parsing,我有一个远程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},

我有一个远程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}
 ]
}
我创建了两个类Book.cs

public class Book
{
    public string title;

    public string author;

    public string price;

    public string inStock;
}
和Books.cs

public class Books
{
    public IList<Book> books { get; set; }
}
公共类书籍
{
公共IList书籍{get;set;}
}
如何正确解析JSON,以便在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);
}
public ActionResult Index()
{
var webClient=新的webClient();
var json=webClient.DownloadString(@)http://www.myurl.json");
Books[]Books=JsonConvert.DeserializeObject(json);
返回视图(书籍);
}

您的
Books
类已经包含一个collection属性来表示您的每本书,因此您不需要实际反序列化
Books[]
,而只需要一个
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);
//由于Books已经是一个容器元素,它将映射“Books”属性
//从JSON对象到匹配的IList属性
var books=JsonConvert.DeserializeObject(json);
示例

您可以使用下面的代码片段中演示的示例代码

//YourClasses.cs
名称空间示例
{
公共课堂用书
{
公共字符串标题;
公共字符串作者;
公共字符串价格;
公共字符串索引;
}
公共课用书
{
公共图书馆图书;
}
}
//YourController.cs
名称空间示例
{
公共类HomeController:控制器
{
[HttpGet]
公共行动结果索引()
{
//示例JSON代替API调用
“书籍”的一名,”,”作者:“:“作者”1\”,,“价格”价:762,\“Ins托克”股市的价格:15},,{“书籍”书籍的一名,”15},,,{“书名”阅读,”书名::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“inStock\”:3},{“title\”:\“第五本书“,”作者“:”作者5“,”价格“:999,”,”书名“:”第六本书“,”作者“:”作者6“,”价格“:499.5,”,”价格“:3},“,”书名“:”第七本书“,”作者“:”作者7“,”价格“:564.5,”,”价格“:”价格“:0}”;
var books=JsonConvert.DeserializeObject(json);
返回视图(书籍);
}
}
}
//Index.cshtml
@范例。书籍
    @foreach(Model.books中的var book){
  • @书名
  • }
您不需要一系列
书籍
。您只需要
书籍
容器:

Books books = JsonConvert.DeserializeObject<Books>(json);
Books Books=JsonConvert.DeserializeObject(json);

这是您需要的图书课程

public class Book
{
    public string title { get; set; }
    public string author { get; set; }
    public double price { get; set; }
    public int inStock { get; set; }
}
public class Books
{
    public List<Book> books { get; set; }
}
这是你需要的图书课

public class Book
{
    public string title { get; set; }
    public string author { get; set; }
    public double price { get; set; }
    public int inStock { get; set; }
}
public class Books
{
    public List<Book> books { get; set; }
}
公共类书籍
{
公共列表书籍{get;set;}
}
您需要在代码中包含此项

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

    return View(books);
}
public ActionResult Index()
{
var webClient=新的webClient();
var json=webClient.DownloadString(@)http://www.myurl.json");
Books Books=JsonConvert.DeserializeObject(json);
返回视图(书籍);
}

为了确保您的类对于JSON是正确的,您可以在VS pro中“将JSON粘贴为类”,然后反序列化。

将书籍声明为:

public class Books : List<Book> 
公共类书籍:列表
并按@chadnt所示对其进行去序列化:

Books books = JsonConvert.DeserializeObject<Books>(json);
Books Books=JsonConvert.DeserializeObject(json);

您有什么错误吗?非常感谢:)很有魅力。