1. 程式人生 > >C# web api返回型別設定為json的兩種方法

C# web api返回型別設定為json的兩種方法

web api寫api介面時預設返回的是把你的物件序列化後以XML形式返回,那麼怎樣才能讓其返回為json呢,下面就介紹兩種方法: 
方法一:(改配置法) 

找到Global.asax檔案,在Application_Start()方法中新增一句: 

程式碼如下:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 

修改後: 
程式碼如下:
protected void Application_Start() 

AreaRegistration.RegisterAllAreas(); 
WebApiConfig.Register(GlobalConfiguration.Configuration); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 
// 使api返回為json 
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 


這樣返回的結果就都是json型別了,但有個不好的地方,如果返回的結果是String型別,如123,返回的json就會變成"123"; 


解決的方法是自定義返回型別(返回型別為HttpResponseMessage) 
程式碼如下:
public HttpResponseMessage PostUserName(User user) 

String userName = user.userName; 
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(userName,Encoding.GetEncoding("UTF-8"), "application/json") }; 
return result; 


方法二:(萬金油法) 


方法一中又要改配置,又要處理返回值為String型別的json,甚是麻煩,不如就不用web api中的的自動序列化物件,自己序列化後再返回 
程式碼如下:
public HttpResponseMessage PostUser(User user) 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
string str = serializer.Serialize(user); 
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; 
return result; 


方法二是我比較推薦的方法,為了不在每個介面中都反覆寫那幾句程式碼,所以就封裝為一個方法這樣使用就方便多了。 

程式碼如下:
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; 


方法三:(最麻煩的方法) 

方法一最簡單,但殺傷力太大,所有的返回的xml格式都會被斃掉,那麼方法三就可以只讓api介面中斃掉xml,返回json 

先寫一個處理返回的類: 
程式碼如下:
public class JsonContentNegotiator : IContentNegotiator 

private readonly JsonMediaTypeFormatter _jsonFormatter; 

public JsonContentNegotiator(JsonMediaTypeFormatter formatter) 

_jsonFormatter = formatter; 


public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) 

var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json")); 
return result; 



找到App_Start中的WebApiConfig.cs檔案,開啟找到Register(HttpConfiguration config)方法 

新增以下程式碼: 
程式碼如下:
var jsonFormatter = new JsonMediaTypeFormatter(); 
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); 

新增後代碼如下: 
程式碼如下:
public static void Register(HttpConfiguration config) 

config.Routes.MapHttpRoute( 
name: "DefaultApi", 
routeTemplate: "api/{controller}/{action}/{id}", 
defaults: new { id = RouteParameter.Optional } 
); 
var jsonFormatter = new JsonMediaTypeFormatter(); 
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); 


方法三如果返回的結果是String型別,如123,返回的json就會變成"123",解決方法同方法一。 

其實web api會自動把返回的物件轉為xml和json兩種格式並存的形式,方法一與方法三是斃掉了xml的返回,而方法二是自定義返回。

轉載在:http://www.poluoluo.com/jzxy/201402/262277.html

相關推薦

C# web api返回型別設定json方法

web api寫api介面時預設返回的是把你的物件序列化後以XML形式返回,那麼怎樣才能讓其返回為json呢,下面就介紹兩種方法: 方法一:(改配置法) 找到Global.asax檔案,在Application_Start()方法中新增一句:  。程式碼如下: Glo

WebApi返回型別設定json的三方法

方法一:(改配置法)  找到Global.asax檔案,在Application_Start()方法中新增一句: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Cl

通過HttpClient呼叫WebApi的Get、Post方法(返回型別限定json格式)

public class HttpClientHelper { public static string GetResponseJson(string url) { HttpClient httpClient

[轉]Web APi之認證(Authentication)實現方式【二】(十三)

用戶數 ted das 客戶 元素 基礎 目標 開始 net 本文轉自:http://www.cnblogs.com/CreateMyself/p/4857799.html 前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如

Web APi之認證(Authentication)實現方式【二】(十三)

基於web 推薦 zed {0} scheme sage https 函數 ges 原文:Web APi之認證(Authentication)兩種實現方式【二】(十三)前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如何合理的利用

Flask 設定cookie的方法.獲取cookie,和刪除cookie的方法(修改過期時間)

設定cookie 方法一: 建立物件   make_response的物件 呼叫物件 的set_cookie方法設定cookie 方法二: 直接設定表單頭 除了鍵值對,其他部分可去瀏覽器檢查摘抄  resp.headers["Set-Cook

C語言中求最大公約數的方法:輾轉相除法和更相減損術

輾轉相除法:        輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如

TextView 上下左右設定圖片的方法

1,text動態設定圖片方法 drawable = getResources().getDrawable(R.mipmap.an_icon_2x); /// 這一步必須要做,否則不會顯示. drawable.setBounds(0, 0, drawable.getMinimumWidth()

C#產生一組不重複隨機數的方法

最近在開發專案的過程中,需要產生一些隨機數,如果我們簡單的用C#中的Random.Next方法,很難產生一組少重複的隨機數(當然是偽隨機數),在網上也看了很多方法,貌似也不可行,或者比較複雜。於是,參考網上的一些方法,自己寫了兩個個產生一組偽隨機數的方法。 方法一的程式碼如

php設定時區的方法

php5後都要自己設定時區,要麼修改php.ini的設定,要麼在程式碼裡修改。 在PHP.INI中設定時區 date.timezone = PRC 在程式碼中設定時區 1 date_default_timezone_set('Asia/Shanghai');/

.net mvc web api 返回 json 內容,過濾值null的屬性

.net mvc web api 返回 json 內容時,好多屬性為null的沒必要下發。 下面看下怎麼過濾值為null的屬性 1.響應內容(過濾前) {"msg":"初始化成功!","code"

web api返回json資料

首先咋們瞭解一下什麼事json: JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Jav

後臺date型別轉換json字串時,返回前臺頁面的是long time值問題解決

https://blog.csdn.net/zhanglf02/article/details/77770118問題頁面回顧: 本例環境和框架:maven工程+ssm框架+jdk1.7+tomcat7.0 解決方案: 解決方案分為兩種: 第一種:如果bo(實體類)對應的欄位(

C# web api 中過濾器的使用

抽象類 面向切面 控制 ted 日誌 開篇 nac 基類 log4net 一、開篇   Fiter在Web API中經常會用到,主要用於記錄日誌,安全驗證,全局錯誤處理等;Web API提供兩種過濾器的基本類型:actionfilterattribute,exception

【GSON】複雜集合型別轉換Json

使用Gson將List<Map<String,Object>>型別的物件轉換為Json格式 轉換物件賦值 List < Map < String , Object > > lists = new ArrayList <

【Spring Boot-技巧】API返回值去除NULL的欄位

簡介 在前後端分離的微服務時代,後端API需要良好的規範。本篇主要將一個數據返回時的一個小技巧-- 過濾為空欄位 解決痛點:將有效解決資料傳輸過程中的流量浪費。 元件簡介 Jackson ObjectMapper 通過自定義配置該元件可以選擇性序列化返回的JSON。 官方解釋 Spring MVC(客戶端和伺

JavaScript中string型別轉換json型別

在使用一個外掛時,它的資料接收的是json陣列的型別,但是我寫的是servlet中的資料是list格式的,這裡我們可以將list中的資料整理一下,整理成“json”型別的字串,這些資料傳到jsp中是string型別的,需要我們轉一下格式: <div> &l

普元 EOS Platform 7.5 datagrid裡使用nui-datepicker,將日期型別設定dateFormat="yyyy-MM-dd",但編輯後,日期顯示仍包含時分秒

【問題】 EOS Platform 7.5 datagrid裡使用nui-datepicker,將日期型別設定為dateFormat="yyyy-MM-dd",但編輯後,日期顯示仍包含時分秒 編輯前,顯示為年月日: 編輯後,現在顯示為年月日時分秒 【解答】

將字典型別(Dictionary)型別資料序列化為json資料及拼接key1=value1&key2=value2的方法

一、序列化為Json字串 當需要將物件轉為{ "street": "科技園路.", "city": "江蘇蘇州", "country": "中國"}這種格式時使用序列化(不引入外部dll的方式)

Web Api返回

namespace WebApi.Controllers { public class HomeController : ApiController { [HttpGet] public int GetByAge(string