![](/img/trans.png)
[英]Json deserialize output show in View using ASP.NET MVC and Json.Net
[英]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"
}
]
}
我的用於獲取此json數據對象的Model類是-
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以在視圖包消息中返回視圖-//我已經編輯了contrller類
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數據。
首先: .First()
始終僅返回一個元素或異常。
要獲取所有名稱,您可以:
在列表/表中顯示城市,將視圖模型作為RootObject
傳遞,並在視圖中循環遍歷RootObject.city
每個項目
使用string.Join
方法聯接所有名稱,然后像您一樣將它們傳遞給帶有ViewBag的View。
示例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在哪里起作用。 我看不到您已經在模型中定義了它。
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(var city viewBag.Cities){//綁定您的數據}
希望這一步能有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.