マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

WCFASP.NET Web API で、指定の JSON を返す(送信する)方法を説明する。

JSON フォーマットとクラスの定義

JSONを返すサービスを作成する

WCFの場合

WCF で JSON を返す場合、既定では DataContractJsonSerializer? が使用される。

以下に注意する。

DataContractJsonSerializer? を使用

JSON.NETなどを使用

参考情報

WCF における JSON 処理の参考情報

注意点

にあるように、サービスのクラスに、
AspNetCompatibilityRequirements? 属性を追加する。

ASP.NET Web API の場合

ASP.NET Web API は、既定で JSON.NET によって Serialize される。このため、Dictionary 型も問題なく Serialize できる。

設定

Web API の返すJSONフォーマット(JSONシリアライズのフォーマット)をWebApiConfigで、以下のように指定できる。

// JSON データにはCamelCaseを使用 (JSON.NET)
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

JSON.NETを使用

注意点

相互運用に関する注意事項

Java など、他プラットフォームとの相互運用を行なう際に注意すべき点。

DataContractJsonSerializer?の問題

既定の DataContractJsonSerializer では、Dictionary 型のオブジェクトを正しく扱えない。

DataContractJsonSerializer?の対策

その他のSerializerを使用する

Dictionary 型のオブジェクトを扱う場合は、JSON.NET など、その他のSerializerを使用する。

JSON フォーマットを、コントラクトとする

Java などの他プラットフォームとの相互運用を考えた場合、
いきなりPOJO または POCO をデータコントラクトとせず、
先ずは出力したい JSON フォーマットを確認する事から始める。

以下の手順で、

  1. 出力したい JSON フォーマットを決める
    (これがデータコントラクトとなる)
  2. そのフォーマットにあわせて、
    1. Java であれば POJO
    2. .NET であれば POCO

クラスを作成する。

参考

JSONのparseを色々試してみた。

JSONを受信するJSON-RPCサービスを作成する方法

Microsoft Azure が公開している REST API

数個、Microsoft Azure が公開している REST API をピックアップした。

これらの REST API でも、JSON のフォーマットが明記されており、
JSON フォーマットレベルでデータコントラクトを結ぶ必要がある。

色々なSerializerと、その歴史

DataContractJsonSerializer?は、
WCFのデータコントラクトのSerializerとして使用されていたこともあり、

などの問題があった。

データコントラクト不要な単方向のやり取りのために、JavaScriptSerializer?などのクラスも追加されたが、
これは、.NET3.5でサポートされなくなり、替わって、JSON.NETがデファクトになり、ASP.NET Web API の標準のシリアライザに採用された。


Tags: :.NET開発, :.NET Core, :.NET Standard, :ASP.NET, :ASP.NET Web API


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS