文字列で作ったJSONをWCFサービスの戻り値として返す|火消しに行って油を注ぐ火消しに行って油を注ぐ私の知りたいを解決するブログ。あとプログラミングのメモなど。WCF文字列で作ったJSONをWCFサービスの戻り値として返すWCFサービスからJSON形式でレスポンスを返す場合、List型とDictionary型を使ってデータを詰めるか、あるいはJSONに対応するプロパティを持たせたクラスを定義するなどして、戻り値の型に設定すると思います。今回は自前で作ったJSON形式の文字列を、そのままJSONとしてレスポンスに乗せる方法を試してみました。戻り値にListとDictionaryを使った場合の問題点Dictionaryにデータを詰めた場合、JSONに変換すると「Key」と「Value」が自動で追加されます。データを作る側の汎用性はあるんですが、JSONを受け取る側はメンバーに「Key」と「Value」がついていること前提でプログラムを組む必要があります。※ListとDictionaryでデータを返した場合のJSONの例{"response":[[{"Key":"従業員コード","Value":"1001"},{"Key":"部署名","Value":"総務部"}],[{"Key":"従業員コード","Value":"1002"},{"Key":"部署名","Value":"営業部"}],[{"Key":"従業員コード","Value":"1003"},{"Key":"部署名","Value":"開発部"}]]}これをjavascriptで読んだりすると処理が結構めんどくさいんですよね。KeyとかValueとか使わずに、"従業員コード"で"1001"をズバッっと取得したいんです。JSONの形式に合わせたクラスを作った場合の問題点JSONの形式に合わせたクラスを作る場合は、当然ですがあらかじめJSONの形が決まっていないとダメです。JSONのフォーマットの数だけクラスも作成する必要があり、JSONの項目が可変だったりする場合に対応しきれません。こんな形式のJSONを返したい場合、{"response":{"従業員コード":"1001","部署名":"総務部"}}こんなクラスを用意しておく必要があります。ClassJSONの項目が増えたら、{"response":{"従業員コード":"1001","部署名":"総務部","入社年度":2007}}クラスのプロパティも増やす必要があります。ClassこれだとJSONの形が変わったらWCFサービスを毎回ビルドする必要がありますし、通信が増えればJSONに対応したクラスも増やさないといけません。リクエストごとに戻り値の型が違う場合、WCFサービスのメソッドも増やす必要があります。JSON形式の文字列をJSONデータとして返すResponseFormatにWebMessageFormat.Jsonを指定していると、文字列で作ったJSONのダブルクォーテーションにエスケープ文字「\」が追加されてしまって、JSONが崩れてしまいます。ResponseFormatには何も指定せず、文字列をレスポンスに直接書き込みます。戻り値の型はString型ではなく、System.ServiceModel.Channels.Messageを使用しています。Class実行結果の例{"result_table":[{"従業員コード":"1001","部署名":"総務部"},{"従業員コード":"1002","部署名":"営業部"},{"従業員コード":"1003","部署名":"開発部"}]}Dictionaryのように"Key"、"Value"が勝手に付いてこないので、受信側がJSONとして使いやすいと思います。まとめDataSetからJSONへのシリアライズはJSON.NETを使用しましたが、複雑な構造のJSONを送りたい場合は自前で文字列操作してゴリゴリJSONを作らないといけないので、そこが面倒です。Next>自己紹介ヤマチヨ時代を逆行するレガシーエンジニア。末端SIerでシステムエンジニア紛いの仕事をしております。年齢を重ねるごとに加速する日々の中で、感じた事、考えた事を記録していきたいと思います。@_yamacho_人気記事ハードオフ・オフハウスで実際に売れたものまとめ。売れるもの・売れないもの。Excelのサイズが肥大化して動作が重い原因はたぶんこれ家族で大阪から福岡に帰省するなら車が楽。ヤマト便がサイズの上限を設定!重量と大きさの制限で送れないものが増えた!料金の値上げも実施!独学で地方公務員試験を受けたので、その振り返りなど(社会人経験者枠)【VB.NET】ネットワーク上のフォルダにアクセスしてユーザー/パスワード認証のダイアログを表示する5年間敷きっぱなしのカーペットをコインランドリーで洗濯しました。どんなことが聞かれるのか。