如何从c#中的文本(Json字符串)更改日期格式(或如何从长字符串获取日期值)
我有Json字符串如何从c#中的文本(Json字符串)更改日期格式(或如何从长字符串获取日期值),c#,asp.net,json,asp.net-mvc,datetime,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(1425474
....
{'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)/'}
....
该文本有一个datetime“ResponseTime”:“/Date(1425474069569)/
,我想从该字符串格式化(mm-dd-yyyy)该日期
为了反序列化JSON,我使用JavaScriptSerializer。当我尝试反序列化JSON时,收到以下错误:
/日期(1425473984603)/不是DateTime的有效值
我怎么做?我在谷歌上搜索了很多,但找不到解决方案:(
如果可能的话,请帮助我。您应该将JSON字符串反序列化为一个对象 您可以使用Newtonsoft JSON、JavaScriptSerializer或其他工具。在C#中反序列化JSON内容后,您将拥有一个用于ResponseTime属性的DateTime对象。一旦拥有了date对象,您就可以像这样给出日期格式
string mystring = String.Format("{0:MM-dd-yyyy}", dt); // "03-09-2008"
其中dt是DateTime对象,mystring是字符串值
用于反序列化错误
错误为/Date(1425473984603)/不是有效的DateTime值
检查日期中的斜杠这里有一个与日期对象和JavaScriptSerializer类似的反序列化错误
JSON可以解析为类似JSON结构的对象。例如
{
days: [
{name: 'monday', value: 5},
{name: 'tuesday', value: 7}
],
week: 18
}
将成为具有两个属性的对象:days
和week
。
然后,您可以像使用任何其他C#对象一样使用该对象:
因此,关于您的实际数据:
您的JSON示例的格式似乎有点不正确,因此我稍微修改了start,以制作一个简单的示例
使用(可与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对象。如果日期的格式为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;
}
你用什么来解析JSON?你是如何反序列化你的JSON的?在一个类中属性
ResponseTime
的数据类型是什么?属性ResponseTime
的名称相同你能显示你反序列化到的c
类吗?我不能,因为这是一个很长的数据,所以有很多属性e、 我没有datetime对象,我只有一个json文本。您应该将json反序列化为具有相应属性的对象。您可以使用许多序列化程序。您可以使用Newtonsoft或JavaScriptSerializer反序列化您的对象…我使用的是JavaScriptSerializer
我在反序列化对象。您从未提到在反序列化您的对象时出错。您可以包含该信息吗?我还回答了您最初的问题,假设您反序列化了JSON…另外,如果您可以包含您试图反序列化JSON的类,也会有所帮助。我不想为此主题添加任何包,是否可以不添加任何p软件包?以一种方式编辑,无需任何附加软件包。可以吗,但如何获取ResponseTime
?我在json字符串中有很多ResponseTime
属性当使用上述两种方法之一反序列化json时,您会得到类似json的对象。这意味着您可以使用data.ResponseTime(就像我所做的——上面的代码就是您所需要的一切),或者,如果您解析您拥有的整个JSON字符串,可能类似于data.Objects[I].ResponseTime。它就像一个普通对象。在我的答案顶部添加了一个部分,希望能让它更清楚。
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;
}