[解決済み】WCFサービスからきれいなJSONを返すにはどうすればいいですか?
質問
私は、WCFサービスからいくつかのJSONを返そうとしています。 このサービスは、単に私のデータベースからいくつかのコンテンツを返します。私はデータを取得することができます。しかし、私はJSONのフォーマットについて懸念しています。現在、返されるJSONはこのようにフォーマットされています。
{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"}
現実的には、JSONはできるだけきれいにフォーマットしてほしいです。私は(間違っているかもしれませんが)、きれいなJSONで表現された同じ結果のコレクションは、次のように見えるはずだと信じています。
[{
"Age": 35,
"FirstName": "Peyton",
"LastName": "Manning"
}, {
"Age": 31,
"FirstName": "Drew",
"LastName": "Brees"
}, {
"Age": 29,
"FirstName": "Tony",
"LastName": "Romo"
}]
d "がどこから来ているのか全くわかりません。また、なぜエスケープ文字が挿入されるのか、その理由も全くわかりません。私の実体は以下のようなものです。
[DataContract]
public class Person
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public int Age { get; set; }
public Person(string firstName, string lastName, int age)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Age = age;
}
}
コンテンツを返す役割を担うサービスは、次のように定義されています。
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string GetResults()
{
List<Person> results = new List<Person>();
results.Add(new Person("Peyton", "Manning", 35));
results.Add(new Person("Drew", "Brees", 31));
results.Add(new Person("Tony", "Romo", 29));
// Serialize the results as JSON
DataContractJsonSerializer serializer = new DataContractJsonSerializer(results.GetType());
MemoryStream memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, results);
// Return the results serialized as JSON
string json = Encoding.Default.GetString(memoryStream.ToArray());
return json;
}
}
WCFサービスから「きれいな」JSONを返すにはどうすればよいですか? ありがとうございます。
どのように解決するのですか?
GetResultsの戻り値の型を次のように変更します。
List<Person>
.
リストをjson文字列にシリアライズするためのコードを排除する - WCFはあなたのために自動的にこれを行います。
Person クラスの定義を使用すると、次のようなコードで動作します。
public List<Person> GetPlayers()
{
List<Person> players = new List<Person>();
players.Add(new Person { FirstName="Peyton", LastName="Manning", Age=35 } );
players.Add(new Person { FirstName="Drew", LastName="Brees", Age=31 } );
players.Add(new Person { FirstName="Brett", LastName="Favre", Age=58 } );
return players;
}
の結果です。
[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},
{"Age":31,"FirstName":"Drew","LastName":"Brees"},
{"Age":58,"FirstName":"Brett","LastName":"Favre"}]
(すべて1行で)
メソッドにもこの属性を使いました。
[WebInvoke(Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "players")]
WebInvoke with Method= "GET" は WebGet と同じですが、私のメソッドのいくつかは POST なので、一貫性を保つためにすべて WebInvoke を使用します。
UriTemplateは、そのメソッドが利用できるURLを設定します。 したがって、私は次のようにGETすることができる。
http://myserver/myvdir/JsonService.svc/players
で、そのまま動きます。
また、URIの.svcを取り除くために、IIRFや他のURLリライターをチェックしてみてください。
関連
-
[解決済み] Windows 7のsvcutil.exeはどこにあるのですか?
-
[解決済み] w3wp.exeとは何ですか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] JSONファイルをprettyprintする方法は?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] Notepad++でJSONを再フォーマットする方法は?
-
[解決済み] PHPスクリプトからJSONを返す
-
[解決済み] WCFトレースをオンにするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] (413) リクエストエンティティが大きすぎる|uploadReadAheadSize
-
[解決済み] w3wp.exeとは何ですか?
-
[解決済み] REST API / ウェブサービスを保護するためのベストプラクティス [終了しました]。
-
[解決済み] WCFサービスのREST / SOAPエンドポイント
-
[解決済み】WCFとASMXのWebサービスの違いは何ですか?
-
[解決済み】WCFサービスからきれいなJSONを返すにはどうすればいいですか?
-
[解決済み] WcfTestClient.exe (Visual Studioの一部)はどこにありますか?
-
[解決済み] WCFトレースをオンにするには?
-
[解決済み] JSONハイジャックはモダンブラウザでも問題ないのか?
-
[解決済み] WCFサービスのタイムアウト値を増加させる