使用される Http メソッドは GET であり、同じ webservice メソッドを (同じパラメーターで) 呼び出しています。
しかし、application/json で Accept ヘッダーを要求するように追加すると、出力が異なります。原因は、アバター画像を保持する User という名前のオブジェクトの Bitmap フィールドです。
Accept application/json ヘッダーを省略した場合、これは簡略化された出力 (XML) になります。
<!-- language: lang-xml -->
<ArrayOfUser xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/XTraN4ForcesFSDomain.Domain">
<User>
<Id>02ddf1e4-ad76-4778-8887-a186014939f8</Id>
<Avatar xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Drawing" i:nil="true" />
<IsActive>false</IsActive>
<LastAccess>0001-01-01T00:00:00</LastAccess>
<Username>quisquam</Username>
<!-- Other properties -->
</User>
<User>
<Id>17db833c-5008-44f0-a713-a186014c22a5</Id>
<Avatar xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Drawing">
<Data xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:base64Binary" xmlns="">iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAAK/INwWK6[...]BIJS/Wd6Pgu/mOoS/HADwfwFUI4VkJHOgAgAAAABJRU5ErkJggg==</Data>
</Avatar>
<IsActive>false</IsActive>
<LastAccess>0001-01-01T00:00:00</LastAccess>
<Username>labore</Username>
</User>
</ArrayOfUser>
まぁ、これでいいんです!画像(Base64)があります。JSON を取得するようにリクエストを変更すると、画像は返されず、それが表すクラスの名前だけが返されます。
<!-- language: lang-json -->
[
{
"Username": "quisquam",
"LastAccess": "0001-01-01T00:00:00",
"IsActive": false,
"Avatar": null,
"Id": "02ddf1e4-ad76-4778-8887-a186014939f8"
},
{
"Username": "reiciendis",
"LastAccess": "0001-01-01T00:00:00",
"IsActive": false,
"Avatar": "System.Drawing.Bitmap",
"Id": "17db833c-5008-44f0-a713-a186014c22a5"
},
]
ウェブサービスの方法は
<!-- language: lang-c# -->
public IQueryable<User> Get()
{
// return stuff (no big deal here)
}
コードは同じなのに、JSON が本来のように base64 文字列を返さないのはなぜでしょうか?