相关疑难解决方法(0)

ASP.NET MVC JsonResult日期格式

我有一个控制器动作,有效地简单地返回我的模型的JsonResult.所以,在我的方法中,我有类似以下内容:

return new JsonResult(myModel);
Run Code Online (Sandbox Code Playgroud)

除了一个问题外,这很有效.模型中有一个日期属性,这似乎在Json结果中返回,如下所示:

"\/Date(1239018869048)\/"
Run Code Online (Sandbox Code Playgroud)

我应该如何处理日期,以便以我要求的格式退回?或者如何在脚本中处理上述格式?

javascript asp.net-mvc json

237
推荐指数
8
解决办法
17万
查看次数

DateTime的自定义JavaScriptConverter?

我有一个对象,它有一个DateTime属性...我想通过AJAX/JSON将该对象从.ashx处理程序传递回网页...我不想使用第三方控件...

当我这样做:

  new JavaScriptSerializer().Serialize(DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

我明白了:

  "\/Date(1251385232334)\/"
Run Code Online (Sandbox Code Playgroud)

但我想要"8/26/2009"(没关系本地化......我的应用程序是非常本地化的,所以我的日期格式化假设在这个问题中没有争议).如果我制作/注册自定义转换器

public class DateTimeConverter : JavaScriptConverter
{
    public override IEnumerable<Type> SupportedTypes
    {
        get { return new List<Type>() { typeof(DateTime), typeof(DateTime?) }; }
    }

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        Dictionary<string, object> result = new Dictionary<string, object>();
        if (obj == null) return result;
        result["DateTime"] = ((DateTime)obj).ToShortDateString();
        return result;
    }

    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        if (dictionary.ContainsKey("DateTime"))
            return new DateTime(long.Parse(dictionary["DateTime"].ToString()), DateTimeKind.Unspecified);
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我得到这个结果(因为自定义序列化方法的返回值是一个字典):

{"DateTime":"8/27/2009"} …
Run Code Online (Sandbox Code Playgroud)

.net javascript ajax converter

27
推荐指数
3
解决办法
2万
查看次数

如何处理从WCF数据服务(OData)返回的json DateTime

我相信我在这里遗漏了一些明显的东西.当我从OData服务请求JSON响应时,我得到的DateTime属性的结果与我请求XML时的结果不同.我将使用NerdDinner OData feed作为示例.

JSON:

http://www.nerddinner.com/Services/OData.svc/Dinners(1)?$format=json
"EventDate": "\/Date(1235764800000)\/"
Run Code Online (Sandbox Code Playgroud)

XML:

http://www.nerddinner.com/Services/OData.svc/Dinners(1)
<d:EventDate m:type="Edm.DateTime">2009-02-27T20:00:00</d:EventDate>
Run Code Online (Sandbox Code Playgroud)

当我做警报(新日期(1235764800000))时,我得到这个结果: 替代文字

当我使用LINQPad运行相同的查询时,我也得到了8PM的结果.为什么JSON结果中的时区不正确?似乎假设响应是GMT.我应该在客户端上处理这个(通过javascript)还是我可以在服务器上设置的东西?

我在客户端上使用jQuery,在服务器上使用WCF数据服务(和实体框架).

更新:

我在客户端使用Datejs来处理UTC日期时间格式.我想知道这是否是解决这个问题的正确方法.

 function getDateString(jsonDate) {
     if (jsonDate == undefined) {
         return "";
     }
     var utcTime = parseInt(jsonDate.substr(6));

     var date = new Date(utcTime);
     var minutesOffset = date.getTimezoneOffset();

     return date.addMinutes(minutesOffset).toString("M/d/yyyy h:mm tt");
 }
Run Code Online (Sandbox Code Playgroud)

wcf json wcf-data-services odata

20
推荐指数
3
解决办法
4万
查看次数

JavaScriptSerializer.Deserialize不接受JavaScriptSerializer.Serialize序列化的日期

如何找到此问题的来源,JavaScriptSerializer无法对JavaScriptSerializer序列化的日期值进行反序列化?

在调用应用程序中:

var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(model);

// generates this json
{'Guid':'guid','OrderNumber':'1','OrderDate':'\/Date(1299456000000)\/',
   'OrderStatus':'Completed','DiscountRate':0.0000}
Run Code Online (Sandbox Code Playgroud)

在接收申请中:

string json = @"{'Guid':'guid','OrderNumber':'1','OrderDate':'\/Date(1299456000000)\/',
                 'OrderStatus':'Completed','DiscountRate':0.0000}";
var serializer = new JavaScriptSerializer();
var model = serializer.Deserialize(json);
Run Code Online (Sandbox Code Playgroud)

引发String was not recognized as a valid DateTime异常.

如果JavaScriptSerializer序列化日期,为什么JavaScriptSerializer不能反序列化?

c# serialization json javascriptserializer deserialization

5
推荐指数
1
解决办法
3317
查看次数