【问题标题】:How to pretty-print JSON script in MVC 4 API如何在 MVC 4 API 中漂亮地打印 JSON 脚本
【发布时间】:2012-10-11 13:21:30
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您使用的是 Web Api。你可以设置:

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

    【讨论】:

    • 你可以在这个周围加上#if DEBUG#endif,所以这个只在调试时使用
    • 我应该把这段代码放在什么文件里?
    • @Leviathan_the_Great 这个代码已经很老了,所以 api 可能已经改变了,但你可以把它放在 Startup.cs 之类的地方。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      动机:如果查询字符串包含单词prettyprintprettyprint=true,则漂亮打印,如果查询字符串中没有单词prettyprintprettyprint=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());       
          }
      

      【讨论】:

        【解决方案4】:

        如果它是您要序列化为 JSON 的对象,您只需添加一个参数来“美化”它。

        JsonConvert.SerializeObject(object, Formatting.Indented);
        

        【讨论】:

          猜你喜欢
          • 2010-09-26
          • 1970-01-01
          • 1970-01-01
          • 2012-10-08
          • 1970-01-01
          • 1970-01-01
          • 2013-10-03
          • 2011-08-05
          相关资源
          最近更新 更多