使用 ASP.NET MVC 和 JSON.Net 获取视图中的所有对象 json 数据
get all object json data in view using ASP.NET MVC and JSON.Net
我创建了一个 .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"
}
]
}
我的模型 class 获取此 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; }
}
现在在控制器中我创建 actionresult 到 return view in view bag message-
// 我已经编辑了控制器 class
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 文件的第一个对象。只喜欢 "Flensburg Firth" 的数据。但我想显示该城市的所有三个地方。在这种情况下,我如何获得所有反序列化的 json 数据。
首先:.First()
总是return只有一个元素或异常。
要获取所有名称,您可以:
显示 list/table 中的城市作为 RootObject
传递给视图模型,并在视图中循环遍历 RootObject.city
[=39= 中的每个项目]
使用 string.Join
方法加入所有名称,并像您一样将它们传递给带有 ViewBag 的视图。
示例String.Join(", ",json.city.Select(c => c.Name);
=> 输出:London, New York, Paris
关于"always getting last element":
此代码将 return 只有最后一个元素。
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
值覆盖为第二个元素名称。所以最后你会得到最后一个元素名称
将您的视图更改为此
@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 在哪里发挥作用。我没有看到你在你的模型中定义它。
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);
}
// 你甚至可以在你的 ViewModel 中使用它
ViewBag.Cities=mycities;
而且在你看来
@Foreach(变种城市viewBag.Cities){
//绑定你的数据
}
希望这些步骤能帮到你
我创建了一个 .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"
}
]
}
我的模型 class 获取此 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; }
}
现在在控制器中我创建 actionresult 到 return view in view bag message- // 我已经编辑了控制器 class
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 文件的第一个对象。只喜欢 "Flensburg Firth" 的数据。但我想显示该城市的所有三个地方。在这种情况下,我如何获得所有反序列化的 json 数据。
首先:.First()
总是return只有一个元素或异常。
要获取所有名称,您可以:
显示 list/table 中的城市作为
[=39= 中的每个项目]RootObject
传递给视图模型,并在视图中循环遍历RootObject.city
使用
string.Join
方法加入所有名称,并像您一样将它们传递给带有 ViewBag 的视图。
示例String.Join(", ",json.city.Select(c => c.Name);
=> 输出:London, New York, Paris
关于"always getting last element": 此代码将 return 只有最后一个元素。
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
值覆盖为第二个元素名称。所以最后你会得到最后一个元素名称
将您的视图更改为此
@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 在哪里发挥作用。我没有看到你在你的模型中定义它。
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);
}
// 你甚至可以在你的 ViewModel 中使用它
ViewBag.Cities=mycities;
而且在你看来 @Foreach(变种城市viewBag.Cities){ //绑定你的数据 }
希望这些步骤能帮到你