目次
概要
Web API のリクエスト/レスポンス形式をXMLにしたい場合があると思います。
そんな時にリクエストヘッダーによってリクエスト/レスポンス形式を指定する方法、またシリアライズ/デシリアライズをSystem.Xml.Serializationを利用して簡潔に記述する方法をご紹介します。
前提
- .NET6 (6.01)
- VisualStudio 2022 for mac (17.3)
事前準備
ASP.NET Core Web API アプリケーションを作成します。作成手順はこちらの記事を参考にしてください。
Program.csの設定
AddXmlSerializerFormatters()を呼び出すことでXMLシリアライズ/デシリアライズできるようにします。
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers()
.AddXmlSerializerFormatters(); // ←これを追加する
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();コントローラークラス
コントローラークラスの設定
サンプルなのでPOSTリクエストを受け取り、そのままレスポンスに渡す簡単な処理を記述しています。
[ApiController]
[Route("[controller]/[action]")]
public class SampleController : Controller
{
[HttpPost]
public SampleResponse Index(SampleRequest request)
{
var response = new SampleResponse()
{
Id = request.Id
};
return response;
}
}リクエスト/レスポンス クラス
リクエストクラスの設定
XmlRoot属性、XmlElement属性によってXML要素をマッピングしています。
これによってリクエストのXML要素名を合わせれば勝手にシリアライズしてくれます。
using System;
using System.Xml.Serialization;
namespace SampleWebAPI.Dto
{
[XmlRoot("REQUEST")]
public class SampleRequest
{
[XmlElement("ID")]
public string Id { get; set; } = string.Empty;
}
}レスポンスクラスの設定
レスポンスクラスもリクエストと同様に出力要素名を指定します。
using System;
using System.Xml.Serialization;
namespace SampleWebAPI.Dto
{
[XmlRoot("RESPONSE")]
public class SampleResponse
{
[XmlElement("ID")]
public string Id { get; set; } = string.Empty;
}
}POSTリクエストの送信方法
Httpリクエストヘッダー
Postmanを利用してリクエストを送信してみます。
ヘッダーを次のように指定することでリクエスト/レスポンスの形式をXMLに指定します。Accept : application/xmlContent-Type : application/xml

Httpリクエストボディ
bodyは次のようにします。
リクエストクラスのXmlRoot属性、XmlElement属性等で指定した要素名にする必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<REQUEST>
<ID>A0001</ID>
</REQUEST>レスポンス
レスポンスが返ってきます。
レスポンスクラスでXmlRoot属性、XmlElement属性に指定した要素名になっています。

まとめ
ここまでWebAPIでリクエスト/レスポンス形式をXMLにする方法とシリアライズ/デシリアライズをSystem.Xml.Serializationを利用して簡潔に記述する方法を説明しました。
参考文献



コメント