RealPath:
WebPath:
2016/11/08 17:47 (JST) 更新
REST API >>

API が出力する各種データ

Contents

前のページ で示しましたが、ApiController のアクションが返した値は 適切なフォーマット に変換された応答となります。

ここでは ApiController の Get メソッドの戻り値を変えることにより、様々なデータ構造を API 応答として返す例を示します。

配列の出力

ValuesController.cs

public class ValuesController : ApiController
{
    public IEnumerable<string> Get()
    {
        return new string[] { "hoge", "fuga" };
    }
}

応答値

[
	"hoge",
	"fuga"
]

クラス構造の出力

ValuesController.cs

public class ValuesController : ApiController
{
	class Hoge
	{
		public string Result { get; set; }
		public string Info { get; set; }
		public int Score { get; set; }
		public bool Flag { get; set; }
	}
	public object Get()
	{
		return new Hoge
		{
			Result = "OK",
			Info = "Hello\nWorld",
			Score = 5000,
			Flag = true
		};
	}
}

出力結果

{
	"Result": "OK",
	"Info": "Hello\nWorld",
	"Score": 5000,
	"Flag": true
}

連想配列の出力

ValuesController.cs

public class ValuesController : ApiController
{
	public object Get()
	{
		Dictionary<string, object> ret = new Dictionary<string, object>();
		ret["Hoge"] = "AAA";
		ret["Fuga"] = "( ˘ω˘)";
		ret["Num"] = 123;
		return ret;
	}
}

出力結果

{
	"Hoge": "AAA",
	"Fuga": "( ˘ω˘)",
	"Num": 123
}

ネストした構造の出力

ValuesController.cs

public class ValuesController : ApiController
{
	class Hoge
	{
		public string Result { get; set; }
		public string Info { get; set; }
		public int Score { get; set; }
		public bool Flag { get; set; }
	}
	public object Get()
	{
		Dictionary<string, object> ret = new Dictionary<string, object>();
		ret["Fuga"] = "( ˘ω˘)";
		ret["Hoge"] = new Hoge
		{
			Result = "OK",
			Info = "Hello\nWorld",
			Score = 5000,
			Flag = true
		};
		ret["MyList"] = new int[] { 10, 20, 100, -1, 3 };
		return ret;
	}
}

出力結果

{
	"Fuga": "( ˘ω˘)",
	"Hoge": {
		"Result": "OK",
		"Info": "Hello\nWorld",
		"Score": 5000,
		"Flag": true
	},
	"MyList": [
		10,
		20,
		100,
		-1,
		3
	]
}

dynamic の出力

ValuesController.cs

using using System.Dynamic;
....
public class ValuesController : ApiController
{
	public object Get()
	{
		dynamic ret = new ExpandoObject();
		ret.Abc = "xxx";
		ret.Def = "yyy";
		ret.MyList = new int[] { 9, 8, 100 };
		return ret;
	}
}

出力結果

{
	"Abc": "xxx",
	"Def": "yyy",
	"MyList": [
		9,
		8,
		100
	]
}