Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

WCFWebAPIで、指定のREST Formatに適合するJSONを返す方法を説明する。

はじめに

出力したいJSONを確認する

まず、どのようなJSONを出力したいのかを確認します。

これがなければ、始まりません。

出力したいJSONに合わせて、クラスやプロパティを定義する

次に、出力したいJSONに合わせて、クラスやプロパティを定義します。

基本

基本的には、以下のルールに従って、クラスやプロパティを定義します。

ルール

出力したいJSON定義するクラス・プロパティ
{ "key1" : "value1", "key2" : "value2" }public class Sample
{
    string key1 { get; set; }
    string key2 { get; set; }
}
[ "1", "2", "3" ]List<string> listData { get; set; }
{ "key1" : [ "1", "2", "3" ] }public class Sample
{
    List<string> key1 { get; set; }
}
{ "key" : { "key1" : "value1", "key2" : "value2" } }public class Sample
{
    string key1 { get; set; }
    string key2 { get; set; }
}
public class Sample2
{
    Sample key { get; set; }
}
[ { "key1" : "value1", "key2" : "value2" },
{ "key1" : "value3", "key2" : "value4" } ]
public class Sample
{
    string key1 { get; set; }
    string key2 { get; set; }
}
List<Sample> listData { get; set; }

BeanとDictionaryの違い

BeanとDictionaryでSerializeされるJSONのformatが異なる。

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

WCFの場合

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

既定のDataContractJsonSerializer?を使用してJSONを返す方法

DataContractJsonSerializer?以外のSerializerを使用してJSONを返す方法

ASP.NET Web APIの場合

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

相互運用

はやり、Serializer毎に挙動が違うので、
RESTのAPIのデータ・コントラクトは、XMLやJSONのformatレベルで行うのが良いようです。

Javaでの検証結果

検証内容

以下を参考に、Tomcat 上で実行する Java の Web API を作成してみました。

結果結果

→ .NET と「同じ」挙動

→ .NET と「異なる」挙動

REST APIのリファレンス

数個、AzureのREST APIをピックアップしてみました。

やはり、JSONのformatが明記されており、formatレベルでデータ・コントラクトを結ぶ必要があります。


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