我有一个自定义JSON格式化程序,它从DateTime值中删除时间戳。以下是代码:
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嵌入XML的情况下删除JSON.Net格式化程序并使用我的自定义格式化程序?
答案 0 :(得分:1)
Web API不会将字符串转换为Json两次,除非您告诉它,也不会使用XML。你没有提供任何代码,所以不可能说出为什么会出现这些问题。
解决原始问题,将DateTime
属性序列化为仅日期非常简单。只需创建自定义转换器并通过属性将其应用于所需的属性。这在Json.NET的Serializing Dates in JSON中有所描述。您可以找到实际的实施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());