如何在ASP.NET Web API C#中返回JSON数组

时间:2018-06-01 18:18:18

标签: c# arrays json asp.net-web-api

我想以下面的格式返回(在网络浏览器中显示)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获取数据:

enter image description here

目前我在控制器中使用以下代码

{
    "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"
                        }
                    ]
                }
            ]
        }
    ]
}

我的输出就像下面我不想要的。

For Average For Details

ADO.Net实体数据模型使用如下 enter image description here

模型类我使用

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; }
    }
}

有人可以帮我吗???

2 个答案:

答案 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”