使用 MVC 和 JSON.Net 获取视图中 ASP.NET 对象 JSON 数据

本文关键字:JSON NET ASP 对象 数据 获取 MVC Net 使用 视图 | 更新日期: 2023-09-27 18:34:02

我创建了一个.json文件,其中包含一个城市的旅游景点。我的 json 文件看起来像这样——

{
 "city":[
 {
 "Name": "Flensburg Firth",
 "Shorttext": "Flensburg Firth or Flensborg Fjord ....",
 "Longitude": 9.42901993,
 "Latitude": 54.7959404,
 "Image": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Flensborg_Fjord_ved_bockholmwik.jpg/400px-Flensborg_Fjord_ved_bockholmwik.jpg"
 },

 {
 "Name": "Naval Academy Mürwik",
  "Shorttext": "The Naval Academy Mürwik is the main train....",
 "Longitude": 9.45944444,
 "Latitude": 54.815,
 "Image": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/MSM-hauptgebaeude.jpg/400px-MSM-hauptgebaeude.jpg"
 },
 {   
 "Name": "Nordertor",
 "Shorttext": "The Nordertor is an old town gate in Flensburg, Germany....",
 "Longitude": 9.43004861,
 "Latitude": 54.79541778,
  "Images":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Nordertor_im_Schnee_%28Flensburg%2C_Januar_2014%29.JPG/266px-Nordertor_im_Schnee_%28Flensburg%2C_Januar_2014%29.JPG"
 }
]

}

获取此 json 数据对象的模型类是 -

 public class City
 {
    public string Name { get; set; }
    public string Shorttext { get; set; }
    public double Longitude { get; set; }
    public double Latitude { get; set; }
    public string Image { get; set; }
 }
 public class RootObject
 {
    public List<City> city { get; set; }
 }

现在在控制器中,我创建操作结果以返回视图袋消息中的视图-我编辑了控制类

    public ActionResult GMap(City objCityModel)
    {
        string name = objCityModel.Name;
        ViewBag.Title = name;

        var ReadJson = System.IO.File.ReadAllText(Server.MapPath(@"~/App_Data/"+name+".json"));
       RootObject json = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<RootObject>(ReadJson);

        foreach (var item in json.poi)
        {
            ViewBag.Name = item.Name;
            ViewBag.ShortText = item.Shorttext;
            ViewBag.Latitude = item.Latitude;
            ViewBag.Longitude = item.Longitude;
            ViewBag.Image = item.Image;
        }
    return View();

我的GMap.cshtml是 -

@model  Test2_search.Models.City

@{
ViewBag.Title1 = "Google Map View";
}
<h2>@ViewBag.Title</h2>
<p>@ViewBag.ShortText</p>
<p>@ViewBag.Latitude</p>
<p>@ViewBag.Longitude</p>
<p>@ViewBag.Image</p>

使用此代码,我只能获取该 json 文件的第一个对象。 只喜欢"弗伦斯堡湾"的数据。 但我想展示那个城市的所有三个地方。在这种情况下,如何获取所有反序列化的 json 数据。

使用 MVC 和 JSON.Net 获取视图中 ASP.NET 对象 JSON 数据

    Lit<City> mycities=new List<City>();
     foreach (var item in json.poi)
    {
        City obj=new City(){
        Name = item.Name,
        ShortText = item.Shorttext,
        Latitude = item.Latitude,
        Longitude = item.Longitude,
        Image = item.Image,
         };
       mycities.Add(obj);
    }

你甚至可以在你的视图模型中拥有它

     ViewBag.Cities=mycities;

在您看来 @Foreach(var city viewBag.Cities){ 绑定您的数据 }

希望此步骤可以提供帮助

首先:.First()总是只返回一个元素或异常。

要获取所有名称,您可以:

  • 在列表/表中将城市传递给视图模型显示为RootObject,并在视图中循环遍历RootObject.city中的每个项目

  • 使用string.Join方法联接所有名称,并像您一样将它们传递给 View with ViewBag。

示例 String.Join(", ",json.city.Select(c => c.Name); => 输出:London, New York, Paris


关于"总是得到最后一个元素":此代码将仅返回最后一个元素。

    foreach (var item in json.poi)
    {
        ViewBag.Name = item.Name;
        ViewBag.ShortText = item.Shorttext;
        ViewBag.Latitude = item.Latitude;
        ViewBag.Longitude = item.Longitude;
        ViewBag.Image = item.Image;
    }

因为在第一次迭代时,您的ViewBag.Name将包含第一个元素名称。在第二次迭代时,您将ViewBag.Name值覆盖为 secon 元素名称。所以最后你会得到最后一个元素名称

将您的视图更改为此

    @model  Test2_search.Models.City

    @{
    ViewBag.Title1 = "Google Map View";
    }
            @foreach (var item in Model)
            {
    <h2>@item.Title</h2>
    <p>@item.ShortText</p>
    <p>@item.Latitude</p>
    <p>@item.Longitude</p>
    <p>@item.Image</p>
}

将控制器操作更改为此操作

    public ActionResult GMap()
    {
        var ReadJson = System.IO.File.ReadAllText(Server.MapPath(@"~/App_Data/whateverthenameis.json"));
       RootObject json = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<RootObject>(ReadJson);
   return View(json.city);
}

我不确定json.poi在哪里发挥作用。 我没有看到你在模型中定义了它。