如何在MVC 4 API中打印JSON脚本

时间:2012-10-21 15:55:57

标签: asp.net-mvc json asp.net-mvc-4

如何使用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
}

4 个答案:

答案 0 :(得分:7)

如果您正在使用Web Api。您可以设置:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;

答案 1 :(得分:3)

您可以使用Json.net NuGet包执行此操作:

JObject.Parse(json).ToString(Formatting.Indented)

答案 2 :(得分:3)

动机:如果查询字符串包含单词prettyprintprettyprint=true,则打印得非常漂亮,如果没有单词,请不要打印。查询字符串中的{1}}或prettyprint

注意:此过滤器会检查每个请求中的精美打印。默认情况下关闭漂亮的打印功能非常重要,仅在请求时启用。

第1步:定义自定义操作过滤器属性,如下所示。

prettyprint=false

第2步:全局配置此过滤器。

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);
    }
}

答案 3 :(得分:2)

如果它是您要序列化为JSON的对象,则只需添加一个参数即可“解决问题”。它

JsonConvert.SerializeObject(object, Formatting.Indented);