繁体   English   中英

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

[英]Do not convert JToken date time string as DateTime

试图解析将日期时间作为字符串保存的 JToken,作为字符串。 隐式地它正在做的是将其视为日期时间,解析然后作为字符串传回。

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

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

我真正想要的是传递的任何内容,即原始值。

曾尝试使用Formatting.None ,但这会带来双引号等。

有没有简单的方法?

使用DateParseHandling可以覆盖JSON.NET的自动尝试,以DateTimeify看起来像DateTimey的任何东西。

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM