C# web api 返回類型設置為json的兩種方法


   每次寫博客,第一句話都是這樣的:程序員很苦逼,除了會寫程序,還得會寫博客!當然,希望將來的一天,某位老板看到此博客,給你的程序員職工加點薪資吧!因為程序員的世界除了苦逼就是沉默。我眼中的程序員大多都不愛說話,默默承受着編程的巨大壓力,除了技術上的交流外,他們不願意也不擅長和別人交流,更不樂意任何人走進他們的內心!

   悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。我們都知道計算機技術發展日新月異,速度驚人的快,你我稍不留神,就會被慢慢淘汰!因此:每日不間斷的學習是避免被淘汰的不二法寶。

   廢話不多說,直接正題如下:

   ASP.NET Web API

  (本文簡稱Web API),是基於ASP.NET平台構建的應用程序框架。

   Web API基於在 MVC 應用程序中添加的一個特殊的 Controller,這種 Controller 稱為 API Controller,和MVC普通的 Controller 相比它主要有如下兩個不同的特點:

  1. Action 方法返回的是 Model 對象,而不是ActionResult
  2. 在請求時,Action 方法是基於 HTTP 請求方式來選擇的

     從API Controller的Action方法返回給客戶端的Model對象是經過JSON編碼的。API Controller的設計僅是為了提供傳遞Web數據的服務,因此它不支持View、Layout 和其它HTML呈現相關的特性。Web API 能支持任何有Web 功能的客戶端,但最常用的是為Web應用程序中的Ajax請求提供服務。

      一般我們會在下面這兩種情況下選擇使用API Controler:

  1. 需要大量的返回JSON格式數據的Action方法。

      2. 和HTML無關,只是純粹為數據提供服務。

      初學webAPI時,我們做出的程序默認返回類型是XML格式,那么怎么使其返回JSON類型格式的數據呢?有如下兩種方法:

     方法一:(改配置法) 

     找到Global.asax文件,在Application_Start()方法中添加如下一段:代碼如下:

     GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 
     此方法殺傷力太大,所有的返回的xml格式都會被斃掉,所以要根據實際需求慎重選擇。

     方法二:(萬金油法) 

     新建一個類:代碼如下:

 public class ResultToJson
    {
        public static HttpResponseMessage toJson(Object obj)
        {
            String str;
            if (obj is String || obj is Char)
            {
                str = obj.ToString();
            }
            else
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                str = serializer.Serialize(obj);
            }
            HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
            return result;
        } 
    }

      注意:對JavaScriptSerializer命名空間的引用,來自MSDN上的說法如下:

      命名空間:   System.Web.Script.Serialization
      程序集:  System.Web.Extensions(System.Web.Extensions.dll 中)

      案例代碼如下:

       [HttpGet]
        public HttpResponseMessage Get()
        {
            List<Person> list = new List<Person>();
            for (int i = 0; i < 10; i++)
            {
                Person P = new Person()
                {
                    Name = "Name" + i,
                    Age = i,
                    Sex = i % 2 == 0 ? "M" : "W"
                };
                list.Add(P);
            }
            return ResultToJson.toJson(list);
        }
 public class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private string sex;

        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }

    }

      萬金油方法屬於自定義返回,在不能斃掉XML返回的情況下,推薦使用的此方法。

      好好學習,天天向上,初學/自學WebAPI,一步一個腳印,切勿急躁,一步一個台階,總會高升。

      @陳卧龍的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM