有没有一种简单的方法来配置JSON.NET,以便一些DateTime字段将被格式化为没有时间,而其他DateTime字段仍将被格式化为时间?范例:
DateTime
{ firstName: 'John', lastName : 'Doe', birthday: '1965-09-23' }
7cjasjjr1#
如果您需要它只影响特定字段,请先创建转换器类型:
public class OnlyDateConverter : IsoDateTimeConverter { public OnlyDateConverter() { DateTimeFormat = "yyyy-MM-dd"; } }
然后将此属性添加到您想要的任何字段/属性中:
[JsonConverter(typeof(OnlyDateConverter))]
qncylg1j2#
尝试添加此行以配置Web API:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add( new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });
pprl5pva3#
Youssef的OnlyDateConverter答案是最好的。但这里有一个替代方案:
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库绑定到您的类。缺点-该属性现在在您使用它的任何地方都公开为字符串,这可能会导致它自己的一系列问题。
t1qtbnec4#
Youssef的Answer在使用Newtonsoft.Json序列化模型中的单个字段时有效。但默认情况下,核心使用System.Text.Json来序列化对象。同样的事情可以在没有Newtonsoft的情况下在核心中实现,如下所示:
using System.Text.Json.Serialization; internal class JsonOnlyDateConverter : JsonConverter<DateTime> { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.ParseExact(reader.GetString()!, "yyyy-MM-dd", CultureInfo.InvariantCulture); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)); } }
并在模型中使用它:
using System.Text.Json.Serialization; ... [JsonConverter(typeof(JsonOnlyDateConverter))] public DateTime MyDateField { get; set; }
4条答案
按热度按时间7cjasjjr1#
如果您需要它只影响特定字段,请先创建转换器类型:
然后将此属性添加到您想要的任何字段/属性中:
qncylg1j2#
尝试添加此行以配置Web API:
pprl5pva3#
Youssef的
OnlyDateConverter
答案是最好的。但这里有一个替代方案:优点-您不需要将Newtonsoft.Json库绑定到您的类。
缺点-该属性现在在您使用它的任何地方都公开为字符串,这可能会导致它自己的一系列问题。
t1qtbnec4#
Youssef的Answer在使用Newtonsoft.Json序列化模型中的单个字段时有效。但默认情况下,核心使用System.Text.Json来序列化对象。同样的事情可以在没有Newtonsoft的情况下在核心中实现,如下所示:
并在模型中使用它: