我有一个定制的DateTime格式化程序,可以从JSON值中删除时间戳。代码如下:
var isoJson = JsonConvert.SerializeObject(value, new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" });
return isoJson;当我使用该格式化程序时,由于WebApiConfig文件中的JSON.Net格式化程序,字符串被上面的格式化程序序列化了两次。以下是JSON.Net格式化程序的代码:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));当我删除JSON.Net格式化程序并使用我定制的格式化程序时,JSON被序列化一次,但它被嵌入到XML中。
如何在不将JSON.Net嵌入到XML中的情况下删除JSON格式化程序并使用自定义格式化程序?
发布于 2017-01-13 15:55:02
Web API不会将字符串转换为Json两次,除非您告诉它,它也不会使用XML。但是,您没有提供任何代码,所以不可能说出为什么会出现这些问题。
不过,解决最初的问题,将DateTime属性序列化为日期非常容易。只需创建一个自定义转换器,并通过一个属性将其应用于您想要的属性。这在Json.NET的Serializing Dates in JSON中有描述,. You可以找到一个实际的实现in this arguably duplicate SO question。
从该问题复制,创建一个转换器:
public class OnlyDateConverter : IsoDateTimeConverter
{
public OnlyDateConverter()
{
DateTimeFormat = "yyyy-MM-dd";
}
}然后将其应用于任何要序列化为仅日期的属性:
public class MyClass
{
...
[JsonConverter(typeof(OnlyDateConverter))]
public DateTime MyDate{get;set;}
...
}同一问题中的另一个答案显示了如何通过配置进行全局更改:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });或者,使用自定义转换器:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new OnlyDateConverter());https://stackoverflow.com/questions/41629523
复制相似问题