[英]How to return JSON Array in ASP.NET Web API C#
我想以以下格式返回(在網絡瀏覽器中顯示)json 數組。
{
"RainfallAreaAVG": [
{
"AreaBbsID": "18",
"DistCount": "1",
"SubDistCount": "2",
"Amount": "14",
"Hail": "14",
"ArealDetails": [
{
"DistBbsID": "101",
"SubDistCount": "2",
"Amount": "14",
"Hail": "14",
"SubDistCount": "2",
"DistDetails": [
{
"SubDistBbsID": "101",
"Amount": "14",
"Hail": "2",
"Date": "2011-06-13"
},
{
"SubDistBbsID": "102",
"Amount": "10",
"Hail": "0",
"Date": "2011-06-13"
}
]
}
]
}
]
}
我在 c# 和實體框架 5.0 中使用 asp.net web API (MVC),ADO.Net 實體數據模型作為我的模型。
我正在使用存儲過程從 sql server 數據庫獲取數據:
目前我在我的控制器中使用下面的代碼
namespace RainfallService.Controllers
{
public class DistAVGController : ApiController
{
[HttpGet]
public List<SP_GetRainfallByDistDateAVG_Result> GetRainfall(string distBbsID, string entryDate)
{
using (var db = new Farmer_WebEntities())
{
var rainfalls = db.SP_GetRainfallByDistDateAVG(distBbsID, entryDate).ToList();
return rainfalls;
}
}
[HttpGet]
public List<SP_GetRainfallByDistDateAVGDetails_Result> GetRainfall(string distBbsID, string entryDate,string type)
{
using (var db = new Farmer_WebEntities())
{
var rainfalls = db.SP_GetRainfallByDistDateAVGDetails(distBbsID, entryDate).ToList();
return rainfalls;
}
}
}
}
我的輸出就像我不想要的一樣。
我正在使用的模型類
namespace RainfallService
{
using System;
public partial class SP_GetRainfallByDistDateAVG_Result
{
public string AreaBbsId { get; set; }
public string DistBbsID { get; set; }
public Nullable<int> SubDistCount { get; set; }
public Nullable<decimal> Amount { get; set; }
public Nullable<int> Hail { get; set; }
}
}
和
namespace RainfallService
{
using System;
public partial class SP_GetRainfallByDistDateAVGDetails_Result
{
public string AreaBbsId { get; set; }
public string DistBbsID { get; set; }
public string SubDistBbsId { get; set; }
public Nullable<decimal> Amount { get; set; }
public Nullable<int> Hail { get; set; }
}
}
我的 WebApiConfig.cs 如下
namespace RainfallService
{
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.Remove(config.Formatters.XmlFormatter);
//config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
//var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
//jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
}
有人可以幫我嗎???
如果您想默認返回經過修飾的 JSON,您需要在 WebApiConfig 中配置媒體類型格式化程序。
舉個簡單的例子,在 WebApiConfig.Register(HttpConfiguration config) 方法中,
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter() {
SerializerSettings = new JsonSerializerSettings {
Formatting = Formatting.Indented
}
};
這也是您可以設置其他默認選項的地方,例如將屬性序列化為駝峰式 (CamelCasePropertyNamesContractResolver),或排除空屬性的輸出 (NullValueHandling.Ignore)。
要將您的 List 添加到具有單個屬性RainfallAreaAVG
的新對象,我將執行以下操作:
將控制器操作的返回類型更改為 IHttpActionResult
返回一個匿名對象,並將您的新屬性名稱的值設置為您希望返回的列表
您的控制器最終可能看起來像這樣:
namespace RainfallService.Controllers
{
public class DistAVGController : ApiController
{
[HttpGet]
public IHttpActionResult GetRainfall(string distBbsID, string entryDate)
{
using (var db = new Farmer_WebEntities())
{
var rainfalls = db.SP_GetRainfallByDistDateAVG(distBbsID, entryDate).ToList();
return Ok(new {RainfallAreaAVG = rainfalls});
}
}
[HttpGet]
public IHttpActionResult GetRainfall(string distBbsID, string entryDate,string type)
{
using (var db = new Farmer_WebEntities())
{
var rainfalls = db.SP_GetRainfallByDistDateAVGDetails(distBbsID, entryDate).ToList();
return Ok(new {RainfallAreaAVG = rainfalls});
}
}
}
}
public class ActualRainfall
{
public List<Rainfallareaavg> RainfallAreaAVG { get; set; }
}
public class Rainfallareaavg
{
public string AreaBbsID { get; set; }
public string DistCount { get; set; }
public string Amount { get; set; }
public string Hail { get; set; }
public List<Arealdetail> ArealDetails { get; set; }
}
public class Arealdetail
{
public string DistBbsID { get; set; }
public string SubDistCount { get; set; }
public string Amount { get; set; }
public string Hail { get; set; }
public List<Distdetail> DistDetails { get; set; }
}
public class Distdetail
{
public string SubDistBbsID { get; set; }
public string Amount { get; set; }
public string Hail { get; set; }
public string Date { get; set; }
}
將此作為您的模型類以將GetRainFall()
的返回類型設置為此模型類。
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
在WebApiConfig.cs
,或在使 API 請求在頭中傳遞Application/json
時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.