.Net Web Api返回Json數據中原對象變量名大小寫問題


這兩天在工作中使用SignalR的WebSocket做數據實時傳遞的功能開發,在后端主動向前端廣播數據以Json傳遞時,前端獲取的Json中對應類的變量名首字母默認傳遞的是大寫。而前端一直獲取到的后台返回給Json中字段均為首字母小寫的駝峰命名法。原因出在什么地方了呢?

調研了一番,發現我們一般Web Api 或者Web MVC中的Controler內的那些JsonResult、ActionResult、IHttpActionResult等返回給前端的數據,都是經過語法限定為采用“駝峰”命名法首字母小寫的方式傳遞的。這里簡述下三種方式:

1)在配置路由的WebApiConfig中添加如下屬性:

// 對 JSON 數據使用混合大小寫。駝峰式,但是是javascript 首字母小寫形式. 

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

// 對 JSON 數據使用混合大小寫。跟屬性名同樣的大小輸出 <Ps, 可選>

//config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();

 

2)在Global.asax文件的Application_Start或分裝好的WebModeul中添加如下屬性:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters屬性來增加自定義json轉換器.

不過補充下,到目前為止GlobalConfiguration類只能控制WebApi Controller中Action返回值的序列化機制,它不能控制WebApi Controller中Action參數的反序列化機制,更不能控制MVC Controller的Action序列化機制。

 

3)最后就是我們許多網友采用的附加JsonProperty屬性來加以限制,如下圖所示引用Newtonsoft.Json,給每個屬性限制下就OK了。不過,如果遇到繼承自實體的DTO,則可以選用JsonExtention類中的ToJsonString(true,true)方式轉換對象。

using Newtonsoft.Json;

/// <summary>
///商品類。    
/// </summary>
public class Product
{
   /// <summary>
   /// 商品Id
   /// </summary>
  [JsonProperty("productId")]
  public string ProductId { set; get; }
   /// <summary>
   /// 商品名稱
  /// </summary>
  [JsonProperty("productName")]
  public string ProductName { set; get; }
}

以上就是最近填坑的歷程。



免責聲明!

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



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