【发布时间】:2021-08-09 20:01:36
【问题描述】:
当序列化为 Json 时,如何强制将单个属性格式化为 Date 而不是 DateTime?我使用的是System.Text.Json.Serialization 而不是 newtonsoft json,任何需要我使用 NewtonSoft json 的解决方案都无济于事。
我有一个对象,其中有两个日期时间属性,一个实际上是日期而不是日期时间。
[JsonPropertyName("startDate")]
public DateTime StartDate { get; set; }
[JsonPropertyName("startDate")]
public DateTime ActionDateTime { get; set; }
当我设置它时,我指定它实际上是一个日期。
StarDate = DateTime.Now.Date,
但是当我尝试将其序列化为 JSon 时
var json = JsonSerializer.Serialize(this);
我明白了
{"startDate":"2021-05-20T00:00:00+02:00"}
问题是我发送给它的 API 端点抱怨它是一个日期时间,它需要序列化为一个日期。我知道我可以使用 JsonSerializerOptions 但这会序列化所有日期,我不能这样做。
完整的代码示例供您享受测试
public class Dummy
{
[JsonPropertyName("startDate")]
public DateTime StartDate { get; set; }
[JsonPropertyName("actiondatetime ")]
public DateTime ActionDateTime { get; set; }
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var hold = new Dummy();
hold.StartDate = DateTime.Now.Date;
hold.ActionDateTime = DateTime.Now
var json = JsonSerializer.Serialize(hold);
Console.WriteLine(json);
Console.ReadLine();
}
}
我已经搜索了高低必须有一种方法可以添加属性以强制将单个属性格式化为日期。
【问题讨论】:
-
您可以创建一个具有 DateTime 属性的“ShortDate”类型,并为此格式创建一个 JsonSerializerOptions,基本上将 Date 字段转换为序列化时的 ToShortDateString() 格式
-
如果你不想弄乱转换器,日期结构是另一种选择。
-
“消毒”?真的吗?
-
@IanKemp 我意识到“消毒”对一些男人来说可能是一个非常敏感的话题,请接受我对我的拼写错误的诚挚道歉。