不要将JToken日期时间字符串转换为DateTime

本文关键字:字符串 转换 DateTime 时间 日期 JToken | 更新日期: 2023-09-27 18:24:01

试图解析JToken,它将日期时间保存为字符串。它所做的是将其视为DateTime,进行解析,然后作为字符串返回。

原值为:"2015-11-23T00:00:00"

当我做arr["value"].ToString();我得到:"23/11/2015 00:00:00"

我真正想要的是传递的东西,即原始值。

已经尝试过使用Formatting.None,但这会带来双引号等

有简单的方法吗?

不要将JToken日期时间字符串转换为DateTime

使用DateParseHandling覆盖JSON.NET自动尝试对任何看起来是DateTimey的内容进行DateTimeify。

void Main()
{
    var s = "{ '"value'" : '"2015-11-23T00:00:00'" }";
    using (var sr = new StringReader(s))
    using (var jr = new JsonTextReader(sr) { DateParseHandling = DateParseHandling.None })
    {
        var j = JToken.ReadFrom(jr);
        Console.WriteLine(j["value"].ToString()); // prints '2015-11-23T00:00:00'
    }
}

您可以用声明为"string"的成员来描述类,并在序列化中使用它,这样它就存储在原始表示中:

public class MyObject 
{ 
    public string date { get; set ; }
}
string json = "{ '"date'": '"2015-11-23T00:00:00'" }";
var myObj = JsonConvert.DeserializeObject<MyObject>(json);
Console.WriteLine(myObj.date);

我的解决方案:

public static string DateToStringExact(dynamic date)
{
     string dateString = date.ToString(Formatting.None);  // return "2021-01-01T00:00:00"
     // To return only 2021-01-01T00:00:00 (without ""):
     string res = dateString.Substring(1, dateString.Length-2); 
     //or
     string res = dateString.Replace("'"", "");
     return res;
}

您可以通过以下方式调用此函数:

string x = DateToStringExact(arr["value"])

首先是SerializeObject,然后是DeserializeObject,以获得日期字段的安全值。

JsonConvert.DeserializeObject(JsonConvert.SerializeObject(value);