私は元々HttpResponseMessage
を返すメソッドを持っていましたが、これをIHttpActionResult
に返すように変換したいと思います。JSON文字列を使用したIHttpActionResult
私の問題は、JSON.Netを使用してJSON.Netを使用して複雑な汎用ツリー構造をシリアライズすることです。これはよく書かれたJsonConverter
というカスタムを使用しています(コードは正常に動作しています)。
は、ここでそれが返すものです:カスタムコンバータの出番
string json = NodeToJson(personNode);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(json, Encoding.UTF8, "application/json");
return response;
NodeToJson方法がある...
private static string NodeToJson(Node<Person> personNode) {
var settings = new JsonSerializerSettings {
Converters = new List<JsonConverter> { new OrgChartConverter() },
Formatting = Formatting.Indented
};
return JsonConvert.SerializeObject(personNode, settings);
}
注これはJSONとしてフォーマットstring
を返します。
これをIHttpActionResult
に切り替えると、何を試しても失敗するようです。私はちょうどそれを残すことができます(それが動作)が、私はこれとIHttpActionResult
は私が使用してすべきかであるように思わためのベストプラクティスを使用してすることになっています。
私はreturn Json(json);
にしようとしましたが、おそらくダブル変換を実行しようとしているため、これは無効な解析不可能なJSONになりますか?
return Ok(json);
の結果、JSON文字列がXMLでラップされます。
これを行う正しい方法は何ですか?
EDIT:
私はこの特定の方法を除いて、今IHttpActionResultを使用するには、このプロジェクト内のすべての方法を成功裏に変換しています。
JSONへの汎用ツリーのシリアライズです。どのようなアプローチを試みても、無効なJSONが返されます。 HttpResponseMsessage
アプローチはうまく動作しますが、私はIHttpActionResult
に戻って有効なJSONを取得することはできません。
送信する前にjson文字列を直列化解除してシリアル化し直しています。これは、アプリケーションのパフォーマンスとスケーラビリティに影響します。 \ –