我有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的有效值
我该怎么办?我在谷歌搜索了很多,但无法得到解决方案:(
如果有可能,请帮助我..
答案 0 :(得分:2)
JSON可以解析为看起来像JSON结构的对象。例如,
{
days: [
{name: 'monday', value: 5},
{name: 'tuesday', value: 7}
],
week: 18
}
将成为具有两个属性的对象:days
和week
。
然后,您可以像使用任何其他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类似的反序列化错误
答案 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;
}