【问题标题】:Parse JSON file in ASP.NET MVC and display the data in the webpage在 ASP.NET MVC 中解析 JSON 文件并在网页中显示数据
【发布时间】:2017-02-15 21:01:21
【问题描述】:

我有一个远程 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; }
}

如何正确解析 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);
}

【问题讨论】:

  • 你有什么错误吗?

标签: c# json asp.net-mvc parsing


【解决方案1】:

您的 Books 类已经包含一个集合属性来表示您的每一本书,因此您实际上不需要反序列化 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);

示例

你可以see a complete working example of this here和下面sn-p演示的示例代码。

// YourClasses.cs
namespace Example
{
	public class Book
	{
		public string title;
	
		public string author;
	
		public string price;
	
		public string inStock;
	}
	
	public class Books
	{
		public IList<Book> books;
	}
}

// YourController.cs
namespace Example
{
	public class HomeController : Controller
	{
		[HttpGet]
		public ActionResult Index()
		{
			// Example JSON in lieu of API call
			var 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}]}";	
			var books = JsonConvert.DeserializeObject<Books>(json);
			return View(books);
		}
	}
}

// Index.cshtml
@model Example.Books
<ul>
    @foreach(var book in Model.books){
		<li>@book.title</li>
	}
</ul>

【讨论】:

  • 非常感谢 :) 就像一个魅力。
【解决方案2】:

您不想要Books 的数组。你只需要Books 容器:

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

【讨论】:

    【解决方案3】:

    这是您需要的 Book 类

    public class Book
    {
        public string title { get; set; }
        public string author { get; set; }
        public double price { get; set; }
        public int inStock { get; set; }
    }
    

    这是您需要的 Books 类

    public class Books
    {
        public List<Book> books { 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);
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        将书籍声明为:

        public class Books : List<Book> 
        

        并按照@chadnt 的指示反序列化:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-03
          • 1970-01-01
          • 1970-01-01
          • 2022-01-06
          • 2021-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多