如何将空的 DateTime 值传递给 json?

Posted

技术标签:

【中文标题】如何将空的 DateTime 值传递给 json?【英文标题】:How to pass empty DateTime value to json? 【发布时间】:2021-05-15 07:33:42 【问题描述】:

我有以下名为“originalJson”的 json

  
  "user_active": true,
  "user_firstname": "Bob",
  "user_lastname": "Tester",
  "user_displayname": "Bobby",
  "user_primary_email": "bob@tester.com",
  "user_login_enabled": true,
  "user_profile": 
       "user_locale": "en-gb",
       "user_lang": "en-gb"
   ,
   "user_identities": [],
   "user_roles": [
   
        "app_id": "74a019c9-7171-4af0-a773-3984edaa35ca",
        "context_uuid": "74a019c9-7171-4af0-a773-3984edaa35ca",
        "context_type": "context_application",
        "role_oid": "test_role_a",
        "role_start_date": "2020-06-27T13:00:00Z",
        "role_end_date": "2021-06-27T13:00:00Z"
    
  ]
 

我正在尝试将 role_end_date 值替换为空值“”。 我尝试将其更改为 DateTime?但后来我无法将 jobject 值转换为正确的格式字符串。 我已经尝试了以下

            DateTime roleendDate = DateTime.Now;
            var emptyDate = roleendDate.ToString();
            emptyDate = null;
            roleendDate = Convert.ToDateTime(emptyDate);
            JObject jObj = JObject.Parse(originalJson);
            jObj["user_roles"][0]["role_end_date"] = null;
            string updatedJson = jObj.ToString(Formatting.None);

但是它失败了并且不喜欢 "jObj["user_roles"]["role_end_date"]" 因为它是 DateTime 类型而不是 DateTime?。我

有什么想法吗?

【问题讨论】:

I am trying to replace the role_end_date value with an empty value ""..你是吗?您显示的代码似乎没有尝试这样做。它似乎尝试使用 endDate...的值填充该值,该变量未在您显示的代码的 sn-p 中定义。此外,您不想填充 "" 而只是将其设为空。 I have tried changing it to a DateTime?...it 是什么?请准确,这样我们就不必推断您的意思。 However it is failing and doesn't like...再次,请准确。如果出现错误,请准确告诉我们错误消息的内容以及引发错误的代码行。编程是关于精度和细节的。对问题的模糊描述只会让问题更难解决。 抱歉,是的,我现在已经找到了一个解决方法,但是请注意,我的问题并不清楚(只是给自己读了一遍)。下次我会牢记这一点。谢谢。 没问题。不过,如果您也能为我们澄清“它失败了”这一点,那就太好了。究竟是什么错误,究竟是哪一行代码抛出了它? :-) 【参考方案1】:

抱歉,这条线失败了

 roleendDate = Convert.ToDateTime(emptyDate);   because DateTime is not nullable.  

我的解决方法是:将 roleendDate 设为 DateTime?然后将其转换回空字符串,因为它使日期为 '1/1/0001'

 DateTime? emptyDate = roleendDate;
 emptyDate = null;
 roleendDate = Convert.ToDateTime(emptyDate);

 var nullDate = roleendDate.ToString();
 JObject jObj = JObject.Parse(originalJson)

        if (nullDate.Equals("1/1/0001 12:00:00 AM"))
        
            jObj["user_roles"][0]["role_end_date"] = string.Empty;
        
        else
        
            jObj["user_roles"][0]["role_end_date"] = roleendDate.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'");
        

【讨论】:

以上是关于如何将空的 DateTime 值传递给 json?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin - 如何将空值传递给片段 newInstance 方法?

如何将空值传递给 WebAPI 中的可空类型

将空值传递给 SVG 路径(使用 d3.js)以抑制丢失数据

如何将 vb.net 中日期的空值传递给 sql 存储过程?

将空值传递给 Python 中的存储过程

SrpingMVC/SpringBoot中restful接口序列化json的时候使用Jackson将空字段,空字符串不传递给前端