不要将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
,但这会带来双引号等
有简单的方法吗?
使用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);