【发布时间】:2013-04-25 14:31:34
【问题描述】:
有没有一种简单的方法来配置 JSON.NET,以便 一些 DateTime 字段将不带时间格式化,而其他 DateTime 字段仍将带时间格式化?
例子:
{ firstName: 'John', lastName : 'Doe', birthday: '1965-09-23' }
【问题讨论】:
标签: json datetime asp.net-web-api json.net
有没有一种简单的方法来配置 JSON.NET,以便 一些 DateTime 字段将不带时间格式化,而其他 DateTime 字段仍将带时间格式化?
例子:
{ firstName: 'John', lastName : 'Doe', birthday: '1965-09-23' }
【问题讨论】:
标签: json datetime asp.net-web-api json.net
尝试添加此行来配置您的 Web API:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });
【讨论】:
如果您需要它只影响特定字段,请先创建转换器类型:
public class OnlyDateConverter : IsoDateTimeConverter
{
public OnlyDateConverter()
{
DateTimeFormat = "yyyy-MM-dd";
}
}
然后将此属性添加到您想要的任何字段/属性:
[JsonConverter(typeof(OnlyDateConverter))]
【讨论】:
DateTimeConverterBase。这样干净多了!
/而不是破折号来为某些旧浏览器带来好处:blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html
Microsoft.Rest.ClientRuntime包中预定义的Microsoft.Rest.Serialization.DateJsonConverter类型(与Microsoft.AspNetCore.All包一起安装)
Yousesef 用OnlyDateConverter 回答是最好的。但这里有另一种选择:
private DateTime _birthday;
public string Birthday
{
get { return _birthday.ToString("yyyy-MM-dd"); }
set {
_birthday = DateTime.ParseExact(value, "yyyy-MM-dd",
CultureInfo.InvariantCulture);
}
}
优势 - 您无需将 Newtonsoft.Json 库绑定到您的类。
缺点 - 该属性现在在您使用它的任何地方都作为字符串公开,这可能会导致它自己的一系列问题。
【讨论】: