簡體   English   中英

如何在 ASP.NET Web API C# 中返回 JSON 數組

[英]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;
            }
        }

    }
}

我的輸出就像我不想要的一樣。

對於平均 詳情

ADO.Net 實體數據模型使用如下在此處輸入圖片說明

我正在使用的模型類

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM