ASP.NET Core MVCデフォルトのJSON解析器をJil(出力)に変更
4072 ワード
前に記録しておきましたが、ASP.NET MVC 5のJSON解析器をJilに置き換えます.
本稿では、出力時のみを置き換える、新しい内容:を.NET Core 2.0のデフォルトJSON解析器をJilに置き換えます.
本文の内容はASP.NET Core MVCで出力JSON解析器をJil(Nuget,Github)に置き換えます.
いくつかの公式の入出力のJson解析実装ソースコードを列挙する. TextInputFormatter(公式ソース、テキスト入力クラス) TextOutputFormatter(公式ソース、テキスト出力クラス、本明細書ベースクラス) MediaTypeHeaderValues(公式Content-Type参照) JsonInputFormatter(公式ソース、参照) JsonOutputFormatter(公式ソース、参照) MacBook Pro 13 Retina 8G/256G macOS Sierra 10.12.3 Visual Studio Code 1.10.2 .NET Core 1.1
によってNET Coreの全面解体なので、前回の記録のように、
はい.NET Coreでは,Http要求のJson解析を入力解析と出力解析に分けた.入力(要求パラメータ):一般的にはパラメータが少ない(汎用リストでもCountは大きくない)ので、公式のJson.NETは解析時にも,あまり性能の問題はない. 出力(応答結果):この部分に関連する可能性のあるデータ量は比較的大きいので,本稿では出力オブジェクトのJsonフォーマットを実現しただけである.
1、出力Json解析クラスの確立(
1、Visual Studioコードでプロジェクトを開き、その内蔵端末の
この文書にインストールされているバージョンは2.15.0です.
1.1、単例で
1.2、公式の
2、プロジェクトにおいて、
3、
4、これで出力されたJson解析用Jilの置き換えはすべて終了する.
本稿では、出力時のみを置き換える、新しい内容:を.NET Core 2.0のデフォルトJSON解析器をJilに置き換えます.
本文の内容はASP.NET Core MVCで出力JSON解析器をJil(Nuget,Github)に置き換えます.
いくつかの公式の入出力のJson解析実装ソースコードを列挙する.
環境:
全体の説明:
によってNET Coreの全面解体なので、前回の記録のように、
MediaTypeFormatter
を1つだけ引き継いで、関連する方法を実現することができず、すべて完了しました.はい.NET Coreでは,Http要求のJson解析を入力解析と出力解析に分けた.
主な手順
1、出力Json解析クラスの確立(
TextOutputFormatter
より継承)2、Startup
に新たな出力Json解析器3を登録し、全て終了具体的な手順
1、Visual Studioコードでプロジェクトを開き、その内蔵端末の
dotnet
コマンドでJilをインストールする.以下に示す.dotnet add package jil
この文書にインストールされているバージョンは2.15.0です.
1.1、単例で
JilHelper
のクラスを実現し、主にあちこちでシーケンス化と逆シーケンス化の方法を使用するのが便利で、コードは以下の通りである.//
using Jil;
using System.IO;
public class JilHelper
{
private Options _options;
private JilHelper()
{
_options = new Options(excludeNulls: true, includeInherited: true,
dateFormat: DateTimeFormat.MillisecondsSinceUnixEpoch,
serializationNameFormat: SerializationNameFormat.CamelCase);
}
public static readonly JilHelper Instance = new JilHelper();
public void Serialize(TextWriter writer, object data)
{
JSON.Serialize(data, writer, _options);
}
}
1.2、公式の
MediaTypeHeaderValues
を参考にして、自分で1つを構築する(これを使わなくてもいい、直接コードの中で、文字列をMediaTypeHeaderValue
に変換すればいい.ここで単独で確立する目的は主に後の多重化を考慮する)//
using Microsoft.Net.Http.Headers;
internal class ContentTypeValues
{
public static readonly MediaTypeHeaderValue AppJson = MediaTypeHeaderValue.Parse("application/json").CopyAsReadOnly();
public static readonly MediaTypeHeaderValue TxtJson = MediaTypeHeaderValue.Parse("text/json").CopyAsReadOnly();
}
2、プロジェクトにおいて、
JilOutFormatter
のクラスを新設し、TextOutputFormatter
から継承し、以下に示す.//
using Microsoft.AspNetCore.Mvc.Formatters;
using System;
using System.Text;
using System.Threading.Tasks;
public class JilOutFormatter : TextOutputFormatter
{
//
public JilOutFormatter()
{
SupportedEncodings.Add(Encoding.UTF8);
SupportedEncodings.Add(Encoding.Unicode);
SupportedMediaTypes.Add(ContentTypeValues.AppJson);
SupportedMediaTypes.Add(ContentTypeValues.TxtJson);
}
//
public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding encoding)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (encoding == null)
{
encoding = Encoding.UTF8;
}
var response = context.HttpContext.Response;
using (var writer = context.WriterFactory(response.Body, encoding))
{
JilHelper.Instance.Serialize(writer, context.Object);
await writer.FlushAsync();
}
}
}
3、
Startup
において、ConfigureServices(IServiceCollection services)
という方法を見つけ、以下のように修正する.public void ConfigureServices(IServiceCollection services)
{
// AddMvc AddMvcCore Json
services.AddMvcCore(opts => { opts.OutputFormatters.Add(new JilOutFormatter()); });
services.AddMvc();
}
4、これで出力されたJson解析用Jilの置き換えはすべて終了する.