我想以下面的格式返回(在网络浏览器中显示)json数组。
faucet faucets bath parts bathroom
faucett 0.923077 0.857143 0.363636 0.333333 0.266667
faucetd 0.923077 0.857143 0.363636 0.333333 0.266667
bth 0.222222 0.200000 0.857143 0.250000 0.545455
kichen 0.333333 0.307692 0.200000 0.000000 0.142857
我在c#和Entity Framework 5.0中使用asp.net web API(MVC),ADO.Net实体数据模型作为我的模型。
我使用存储过程从sql server DB获取数据:
目前我在控制器中使用以下代码
{
"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"
}
]
}
]
}
]
}
我的输出就像下面我不想要的。
模型类我使用
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; }
}
}
我的WebApiConfig.cs如下
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; }
}
}
有人可以帮我吗???
答案 0 :(得分:3)
如果您想默认返回美化JSON,您需要在WebApiConfig中配置媒体类型格式化程序。
作为一个简单的例子,在WebApiConfig.Register(HttpConfiguration配置)方法中,
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter() {
SerializerSettings = new JsonSerializerSettings {
Formatting = Formatting.Indented
}
};
这也是您可以设置其他默认选项的位置,例如将属性序列化为camelCase(CamelCasePropertyNamesContractResolver),或排除null属性的输出(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});
}
}
}
}
答案 1 :(得分:2)
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()的reutrn类型为此模型类。
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
WebApiConfig.cs中的
或者在发出API请求时在标题
中传递“Application / json”