1. 程式人生 > >Asp.Net Core中Json序列化處理整理

Asp.Net Core中Json序列化處理整理

忽略 化工 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現在 不支持延遲加載,對於關聯表數據都為null
List<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序列化處理整理