一、 前言
我們采用ABP架構用MVC Controller或Web API返回給前端結果ToJson序列化后得到的屬性命名都是采用js的駝峰格式,即首字母小寫,后面單詞首字母大寫的格式(如:后台屬性名為OrderName,返回的前端js為orderName)。但在實際項目開發中由於某種原因(比如給老系統提供接口或現有系統集成等)需要采用給后台屬性名一致或自己特定的格式,下面就介紹一下基於ABP架構ToJson如何修改默認配置和自定義配置。
二、 修改ToJson序列化默認配置
在Startup文件進行默認配置修改,代碼如下:
public class Startup { private readonly IConfigurationRoot _appConfiguration;
public Startup(IHostingEnvironment env) { _appConfiguration = env.GetAppConfiguration(); } public IServiceProvider ConfigureServices(IServiceCollection services) { // MVC services.AddMvc()
.AddJsonOptions(options => { //配置tojson格式配置 DefaultContractResolver 為和后台屬性名保持一致(即:后台屬性名為OrderName,前端js獲得屬性名也為OrderName) options.SerializerSettings.ContractResolver = new DefaultContractResolver(); //修改為CamelCasePropertyNamesContractResolver,為js的駝峰格式,即abp默認格式(即:后台屬性名為OrderName,前端js獲得屬性名為orderName) //options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); } }
三、ToJson序列化自定義配置
如果需要自定義ToJson序列化格式,需要先寫一個子類繼承DefaultContractResolver,重寫ResolvePropertyName方法,代碼如下:
public class MyPropertyNamesContractResolver : DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { //屬性名全部返回小寫 return propertyName .ToLower(); } }
再參考第二點在Startup文件將配置替換為MyPropertyNamesContractResolver
services.AddMvc()
.AddJsonOptions(options => { //配置tojson格式替換為自定義格式 MyPropertyNamesContractResolver (即:后台屬性名為OrderName,前端js獲得屬性名為ordername) options.SerializerSettings.ContractResolver = new MyPropertyNamesContractResolver(); });