【问题标题】:How to pass empty DateTime value to json?如何将空的 DateTime 值传递给 json?
【发布时间】:2026-01-31 07:05:02
【问题描述】:

我有以下名为“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...再次,请准确。如果出现错误,请准确告诉我们错误消息的内容以及引发错误的代码行。编程是关于精度和细节的。对问题的模糊描述只会让问题更难解决。
  • 抱歉,是的,我现在已经找到了一个解决方法,但是请注意,我的问题并不清楚(只是给自己读了一遍)。下次我会牢记这一点。谢谢。
  • 没问题。不过,如果您也能为我们澄清“它失败了”这一点,那就太好了。究竟是什么错误,究竟是哪一行代码抛出了它? :-)

标签: c# arrays json


【解决方案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'");
        }

【讨论】:

    最近更新 更多