MVC 4 APIを使用して、次のJSON応答を取得して見栄えを良くするにはどうすればよいですか。これはサンプルJSONです
{"Name":"Apple","Expiry":"2008-12-28T00:00:00","Price":3.99}
きれいなJSON
{
"Name":"Apple",
"Expiry":"2008-12-28T00:00:00",
"Price":3.99
}
MVC 4 APIを使用して、次のJSON応答を取得して見栄えを良くするにはどうすればよいですか。これはサンプルJSONです
{"Name":"Apple","Expiry":"2008-12-28T00:00:00","Price":3.99}
きれいなJSON
{
"Name":"Apple",
"Expiry":"2008-12-28T00:00:00",
"Price":3.99
}
Web API を使用している場合。以下を設定できます。
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
これは、 Json.netNuGetパッケージを使用して実行できます。
JObject.Parse(json).ToString(Formatting.Indented)
動機:クエリ文字列に orという単語が含まれている場合はきれいに印刷し、クエリ文字列に orprettyprint
というprettyprint=true
単語がない場合はきれいに印刷しないでください。prettyprint
prettyprint=false
注:このフィルターは、すべての要求でプリティ プリントをチェックします。プリティ プリント機能をデフォルトでオフにし、要求された場合にのみ有効にすることが重要です。
ステップ 1:カスタム アクション フィルタ属性を以下のように定義します。
public class PrettyPrintFilterAttribute : ActionFilterAttribute
{
/// <summary>
/// Constant for the query string key word
/// </summary>
const string prettyPrintConstant = "prettyprint";
/// <summary>
/// Interceptor that parses the query string and pretty prints
/// </summary>
/// <param name="actionExecutedContext"></param>
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
JsonMediaTypeFormatter jsonFormatter = actionExecutedContext.ActionContext.RequestContext.Configuration.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.None;
var queryString = actionExecutedContext.ActionContext.Request.RequestUri.Query;
if (!String.IsNullOrWhiteSpace(queryString))
{
string prettyPrint = HttpUtility.ParseQueryString(queryString.ToLower().Substring(1))[prettyPrintConstant];
bool canPrettyPrint;
if ((string.IsNullOrEmpty(prettyPrint) && queryString.ToLower().Contains(prettyPrintConstant)) ||
Boolean.TryParse(prettyPrint, out canPrettyPrint) && canPrettyPrint)
{
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
}
}
base.OnActionExecuted(actionExecutedContext);
}
}
ステップ 2:このフィルターをグローバルに構成します。
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new PrettyPrintFilterAttribute());
}