Asp.Net Core中Json序列化處理整理
阿新 • • 發佈:2017-05-29
忽略 化工 res ref 工具 使用 asp.net ctr ide
一、Asp.Net Core中的Json序列化處理使用的是Newtonsoft.Json,更多參考:C# Newtonsoft.Json JsonSerializerSettings配置序列化操作,C# Json序列化工具--Newtonsoft.Json簡介和使用
1.Newtonsoft.Json僅 依賴.Net Standard所以支持.Net Framework也支持.Net Core
2.更多說明
/* * 1.在Core Mvc中JsonResult 默認支持Get請求 * 2.使用JQuery的ajax請求,返回json數據自動轉換成 object對象 * 3.在 Core Mvc的 後臺JsonResult序列化的時候,默認情況下自動 處理 的命名規則,改成了 js的駝峰格式 * 4.在 Core Mvc中json 的序列化發序列化使用的是Newtonsoft.Json庫 * 5.默認沒有處理循環引用的問題*/
二、使用實例
Jquery 的ajax get請求
$(‘#btnOne‘).click(function () { //使用ajax get請求json 數據 $.get([email protected]("DataOne")‘, {}, function (data) { console.info(data); console.info(data[0].menuName); }); });
1.默認情況,使用駝峰樣式處理字段名Key
public JsonResult DataThree() { //Ef Core現在 不支持延遲加載,對於關聯表數據都為nullList<Menu> menus = _context.Menu .ToList(); return Json(menus); }
2.設置不使用駝峰格式處理,由後臺字段確定大小寫,也就是默認格式
public JsonResult DataOne() { List<Menu> menus = _context.Menu.ToList(); JsonSerializerSettings settings = new JsonSerializerSettings(); //EF Core中默認為駝峰樣式序列化處理key//settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //使用默認方式,不更改元數據的key的大小寫 settings.ContractResolver = new DefaultContractResolver(); return Json(menus, settings); }
3.處理循環引用,加載關聯表數據、
public JsonResult DataTwo() { List<Menu> menus = _context.Menu .Include(q => q.Model) .ToList(); //處理循環引用問題 JsonSerializerSettings settings = new JsonSerializerSettings(); settings.MaxDepth = 2; settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //設置不處理循環引用 return Json(menus, settings); }
三、全局設置,Json序列化配置
IMvcBuilder依賴註入擴展了MvcJsonMvcBuilderExtensions配置
定義如下 :
// // 摘要: // Extensions methods for configuring MVC via an Microsoft.Extensions.DependencyInjection.IMvcBuilder. public static class MvcJsonMvcBuilderExtensions { // // 摘要: // Adds configuration of Microsoft.AspNetCore.Mvc.MvcJsonOptions for the application. // // 參數: // builder: // The Microsoft.Extensions.DependencyInjection.IMvcBuilder. // // setupAction: // The Microsoft.AspNetCore.Mvc.MvcJsonOptions which need to be configured. public static IMvcBuilder AddJsonOptions(this IMvcBuilder builder, Action<MvcJsonOptions> setupAction); }
MvcJsonOptions:
// // 摘要: // Provides programmatic configuration for JSON in the MVC framework. public class MvcJsonOptions { public MvcJsonOptions(); // // 摘要: // Gets the Newtonsoft.Json.JsonSerializerSettings that are used by this application. public JsonSerializerSettings SerializerSettings { get; } }
在Startup文件中修改
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc() //全局配置Json序列化處理 .AddJsonOptions(options => { //忽略循環引用 options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //不使用駝峰樣式的key options.SerializerSettings.ContractResolver = new DefaultContractResolver(); //設置時間格式 options.SerializerSettings.DateFormatString = "yyyy-MM-dd"; } ); }
更多:
.NetCore中EFCore的使用整理(二)-關聯表查詢
Asp.Net Core MVC控制器和視圖之間傳值
.NetCore中EFCore的使用整理
Asp.Net Core中Json序列化處理整理