首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Web API 2使用自定义JSON格式化程序

问为Web API 2使用自定义JSON格式化程序
EN

Stack Overflow用户
提问于 2017-01-13 15:35:48
回答 1查看 5.1K关注 0票数 1

我有一个定制的DateTime格式化程序,可以从JSON值中删除时间戳。代码如下:

代码语言:javascript
复制
var isoJson = JsonConvert.SerializeObject(value, new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" });
        return isoJson;

当我使用该格式化程序时,由于WebApiConfig文件中的JSON.Net格式化程序,字符串被上面的格式化程序序列化了两次。以下是JSON.Net格式化程序的代码:

代码语言:javascript
复制
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

当我删除JSON.Net格式化程序并使用我定制的格式化程序时,JSON被序列化一次,但它被嵌入到XML中。

如何在不将JSON.Net嵌入到XML中的情况下删除JSON格式化程序并使用自定义格式化程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-13 15:55:02

Web API不会将字符串转换为Json两次,除非您告诉它,它也不会使用XML。但是,您没有提供任何代码,所以不可能说出为什么会出现这些问题。

不过,解决最初的问题,将DateTime属性序列化为日期非常容易。只需创建一个自定义转换器,并通过一个属性将其应用于您想要的属性。这在Json.NET的Serializing Dates in JSON中有描述,. You可以找到一个实际的实现in this arguably duplicate SO question。

从该问题复制,创建一个转换器:

代码语言:javascript
复制
public class OnlyDateConverter : IsoDateTimeConverter
{
    public OnlyDateConverter()
    {
         DateTimeFormat = "yyyy-MM-dd";
    }
}

然后将其应用于任何要序列化为仅日期的属性:

代码语言:javascript
复制
public class MyClass
{
    ...
   [JsonConverter(typeof(OnlyDateConverter))]
   public DateTime MyDate{get;set;}
   ...
}

同一问题中的另一个答案显示了如何通过配置进行全局更改:

代码语言:javascript
复制
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });

或者,使用自定义转换器:

代码语言:javascript
复制
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new OnlyDateConverter());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41629523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档