【问题标题】:Json.Net with [WebMethod]s带有 [WebMethod] 的 Json.Net
【发布时间】:2013-10-02 07:43:55
【问题描述】:

我正在尝试将 Json 格式化程序换成 Json.Net,因此我可以获得 ISO 日期而不是“/Date(1379112467317)/”

我还让 .Net (WebForms) 通过 [WebMethod] 自动处理 Json 序列化/反序列化。似乎没有使用 Json.Net 格式化程序。

在我的 global.asax 中,我可以看到旧的 MS Json 格式化程序被删除,新的 Json.net 格式化程序添加了 IsoDateTimeConverter。

但是,我的 [Webmethod] 仍然使用旧的 /Date()/ json 字符串而不是 Iso 日期。我是否必须在我的 global.asax 中为 [Webmethod] 的自动魔术做任何特别的事情才能使用新的格式化程序?

这是全局代码:

见于:http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx

var formatter = config.Formatters.Where(f => { return f.SupportedMediaTypes.Any(v => v.MediaType.Equals("application/json", StringComparison.CurrentCultureIgnoreCase)); }).FirstOrDefault();

if (formatter != null)
{                    
    config.Formatters.Remove(formatter);
}

JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new IsoDateTimeConverter());
config.Formatters.Add(new JsonNetFormatter(serializerSettings));

【问题讨论】:

  • 你怎么知道格式化程序被调用,你的响应是否在 webform 中被标记为 application/json 响应?
  • 我不确定在调用 WebMethods 时是否调用了我的格式化程序。你知道该怎么说吗?到目前为止,我只知道通过在 App_Start 中单步执行旧的被删除,新的被添加。来自网络的响应是 JSON(而不是 XML)。

标签: json.net webmethod


【解决方案1】:

我认为您设置格式化程序的方式对我来说看起来不错。但是你如何确保它在网络表单返回中被使用,它不会自动发生。

[网络方法] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 公开的东西 GetSomething() {

}

你试试怎么样。

【讨论】:

  • 它实际上是自动发生的。肯定会恢复 JSON,这是一个非常成熟的应用程序。将其添加到踢球中,结果相同,即 /Date()/。也许我需要在其他地方配置 Json.net 以使其返回 Iso Dates?这些示例似乎显示了刚刚更新 IsoDateTimeConverter(),并且单步执行它似乎在上面的格式化程序中获取了 ISO 字符串格式。只是没有自动应用到网络方法中。
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2013-07-07
相关资源
最近更新 更多