如何在c#中更改文本(Json字符串)中的日期格式(或如何从长字符串中获取日期值)

时间:2015-03-12 13:21:28

标签: c# asp.net json asp.net-mvc datetime

我有Json字符串

....
{'ItemId':340,'LineId':340,'ItemName':'Trim 1_5A','ItemType':1},{'ItemId':341,'LineId':341,'ItemName':'Trim 1_5B','ItemType':1}]},'Success':true,'Errors':[],'OperationCanceled':false,'ErrorsConcatented':'','ResponseTime':'/Date(1425474069569)/'}

....

....
{'ItemId':350,'LineId':340,'ItemName':'Trim 1_5A','ItemType':1},{'ItemId':341,'LineId':341,'ItemName':'Trim 1_5B','ItemType':1}]},'Success':true,'Errors':[],'OperationCanceled':false,'ErrorsConcatented':'','ResponseTime':'/Date(1425474069569)/'}

....

该文本的日期时间为'ResponseTime':'/Date(1425474069569)/,我想从该字符串格式化(mm-dd-yyyy)此日期。

要反序列化我正在使用JavaScriptSerializer的JSON。当我尝试反序列化我的JSON时,我收到以下错误:

  

/ Date(1425473984603)/不是DateTime的有效值

我该怎么办?我在谷歌搜索了很多,但无法得到解决方案:(

如果有可能,请帮助我..

3 个答案:

答案 0 :(得分:2)

JSON可以解析为看起来像JSON结构的对象。例如,

{
    days: [
        {name: 'monday', value: 5}, 
        {name: 'tuesday', value: 7}
    ],
    week: 18
}

将成为具有两个属性的对象:daysweek。 然后,您可以像使用任何其他C#对象一样使用该对象:

Console.WriteLine(parsed.week); //Prints 18
Console.WriteLine(parsed.days[0].name); //Prints 'Monday'
Console.WriteLine(parsed.days[1].value); //Prints 7

那么,关于你的实际数据:

你的JSON示例似乎有点格式错误,所以我稍微修改了一下这个简单的例子。

使用JSON.Net(可以与NuGet一起安装),可以这样做:

var jsonString = "{data: [{'ItemId':340,'LineId':340,'ItemName':'Trim 1_5A','ItemType':1},{'ItemId':341,'LineId':341,'ItemName':'Trim 1_5B','ItemType':1}],'Success':true,'Errors':[],'OperationCanceled':false,'ErrorsConcatented':'','ResponseTime':'/Date(1425474069569)/'}";
dynamic data = JValue.Parse(jsonString);

Console.WriteLine(data.ResponseTime); //this is your DateTime object
Console.WriteLine(data.ResponseTime.ToString("mm-dd-yyyy")); //Formatted like you wanted it

编辑:没有包裹。如何使用System.Web.Helpers.Json?

dynamic data = System.Web.Helpers.Json.Decode(jsonString);

Console.WriteLine(data.ResponseTime); ///Date(1425474069569)/

//Now we need to create a DateTime object from this string.
var timeString = data.ResponseTime.Replace("/Date(", "").Replace(")/",""); //Remove the wrapping
var seconds = long.Parse(timeString)/1000; //Parse the number, and turn it into seconds (it was milliseconds)
var date = new DateTime(1970,1,1,0,0,0).AddSeconds(seconds); //Create a new DateTime object starting on the Unix date, and add the seconds
Console.WriteLine(date.ToString("dd-MM-yyyy"));

如果你甚至没有System.Web.Helpers,你也可以手动解析字符串(Regex.Split,String.Split,String.Replace等),并使用上面创建DateTime对象的方法来自日期字符串。

答案 1 :(得分:1)

您应该将JSON字符串反序列化为对象。

您可以使用Newtonsoft JSON,JavaScriptSerializer Deserilize或其他内容。在C#中反序列化JSON内容后,您将拥有ResponseTime属性的DateTime对象。获得日期对象后,您可以给出日期格式......

string mystring = String.Format("{0:MM-dd-yyyy}", dt);          // "03-09-2008"

其中dt是您的DateTime对象,mystring是字符串值...

MSDN Custom Date Time formats doc

反序列化错误

错误是/日期(1425473984603)/不是DateTime的有效值。

检查日期中的斜杠是否与日期对象和JavaScriptSerializer类似的反序列化错误

Date Issue with JavaScriptSerializer

答案 2 :(得分:0)

如果日期的格式为D:20181116110130 + 05'30'或D:20181116110130-05'30'

 private static string ConvertInToDateTime(string DateTime)
    {
        string[] SplitDate = DateTime.Split(':');
        string[] SplitDateTime = null;
        if (SplitDate[1].Contains("+"))
            SplitDateTime = SplitDate[1].Split('+');
        else if (SplitDate[1].Contains("-"))
            SplitDateTime = SplitDate[1].Split('-');
        string TimeStamp = SplitDateTime[0].Insert(12, ":").Insert(10, ":").Insert(8, " ").Insert(6, "-").Insert(4, "-");
        return TimeStamp;
    }