Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从c#中的文本(Json字符串)更改日期格式(或如何从长字符串获取日期值)_C#_Asp.net_Json_Asp.net Mvc_Datetime - Fatal编程技术网

如何从c#中的文本(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

我有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)/'}

....
该文本有一个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;
    }