gpt4 book ai didi

c# - 如何处理 DateTime 的 JSON 数据成员中的空值

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:40 25 4
gpt4 key购买 nike

我从我的服务中收到一个 JSON 文件,如下所示:

{
"body": {
"assignedTo": "aa",
"message": "aaa",
"submittedOn": 1506703098946,
"completedOn": null,
"submittedBy": "web-user",
"completedBy": null,
"isSelected": false,
"name": "aaa"
}
}

“completedOn”的值在我的类中被定义为一个DateTime,但我从服务器得到的是空值。有办法处理吗?

这是我的类结构:

[DataContract]
public class FamilyTask
{
private static readonly DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
[DataMember(Name = "Id")]
public string Id { get; set; }

[DataMember(Name = "name")]
public string name { get; set; }

[DataMember(Name = "assignedTo")]
public string assignedTo { get; set; }

[DataMember(Name = "message")]
public string message { get; set; }

[DataMember(Name = "submittedBy")]
public string submittedBy { get; set; }

[DataMember(Name = "completedBy")]
public string completedBy { get; set; }

[IgnoreDataMember]
public DateTime submittedOn { get; set; }

[DataMember(Name = "submittedOn")]
private long submittedOnTicks {
get { return (long) (submittedOn - unixEpoch).TotalMilliseconds; }
set { submittedOn = unixEpoch.AddMilliseconds(value); }
}

[IgnoreDataMember]
public DateTime completedOn { get; set; }

[DataMember(Name = "completedOn")]
private long completedOnTicks
{
get { return (long)(completedOn - unixEpoch).TotalMilliseconds; }
set { completedOn = unixEpoch.AddMilliseconds(value); }
}
}

编辑:

我确实尝试向 public DateTime 添加一个可为 null 的值? completedOn{get;set;} 但这会导致这个问题:

enter image description here

enter image description here

编辑2:

我实现了可空类和空检查,但我仍然得到这个:

enter image description here

最佳答案

通过添加这样的问号使其可为空:

public DateTime? CompletedOn { get; set;}

然后您可以使用 .HasValue 检查它是否有值。可以使用 .Value 访问实际值。

关于您的编辑,您需要在此处使用.Value(您需要检查是否为空!)

private long completedOnTicks
{
get
{
if(completedOn.HasValue)
{
return (long)(completedOn.Value - unixEpoch).TotalMilliseconds; }
}

// completedOn is null, return something reasonable
return long.MinValue;
}
set { completedOn = unixEpoch.AddMilliseconds(value); }
}

如果网络服务返回 DateTime,为什么不直接这样做呢?

[DataMember(Name = "completedOn")]
public DateTime? CompletedOn { get; set;}

// completedOnTicks is not needed anymore?
private long completedOnTicks
{
get
{
if(CompletedOn.HasValue)
{
return (long)(CompletedOn.Value - unixEpoch).TotalMilliseconds; }
}

// CompletedOn is null, return something reasonable
return long.MinValue;
}
}

如果它不返回 DateTime 而是一个 long,只需让你的 long 也可以为 null。

关于c# - 如何处理 DateTime 的 JSON 数据成员中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com