How to pass a JSON date value via ASP.NET MVC usin

2020-02-18 05:13发布

Possible Duplicate:
Format a Microsoft JSON date?

The ASP.NET function Json() formats and returns a date as

{"d":"\/Date(1240718400000)\/"}

which has to be dealt with on the client side which is problematic. What are your suggestions for approaches to sending date values back and forth?

7条回答
Luminary・发光体
2楼-- · 2020-02-18 05:37

This was found in another post on Stack Overflow:

var date = new Date(parseInt(jsonDate.substr(6))); 

The substr function takes out the "/Date(" part, and the parseInt function gets the integer and ignores the ")/" at the end. The resulting number is passed into the Date constructor.

查看更多
手持菜刀,她持情操
3楼-- · 2020-02-18 05:37

Not everyone agrees with me that it's a good idea, but I find myself most often returning formatted strings instead of proper dates. See How I handle JSON dates returned by ASP.NET AJAX.

查看更多
够拽才男人
4楼-- · 2020-02-18 05:37

Auto convert dates on the client side (if you use jQuery)

--

You didn't specify it, but since you're using ASP.NET MVC you could be using jQuery. If you do, converting to actual dates just became simpler if you use code provided on this blog post. The code extends jQuery's $.parseJSON() functionality, so it automatically converts ISO and ASP.NET date strings to actual JavaScript dates.

I use it with ASP.NET MVC, and it works like a charm. The best part is that it's also backwards compatible. Existing code that uses $.parseJSON() will work just like before (and actually work the same), but if you provide the second parameter and set its value to true, all dates will get automatically converted for you.

The extension uses native browser JSON support where applicable and also works in others that don't. Modern browsers support this functionality anyway.

查看更多
小情绪 Triste *
5楼-- · 2020-02-18 05:42

Take a look at the blog post jQuery, Ajax, ASP.NET and dates.

It details how to work with ASP.NET MVC and jQuery to pass dates via JSON between the server and client side.

查看更多
做自己的国王
6楼-- · 2020-02-18 05:44

After playing with the Json.NET library, I'm wondering why you would choose to use the IsoDateTimeConverter over the JavascriptDateTimeConverter.

I found this to be easier to use with the Ext JS interfaces that I was using when serializing dates from an MVC Controller.

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter());
jsonNetResult.Data = myObject; 

I'm getting this data back into an Ext.data.JsonStore which is able to get the returned value as a date without me having to specify a date format to parse with.

        store:new Ext.data.JsonStore({
            url: pathContext + '/Subject.mvc/Notices',
            baseParams: { subjectId: this.subjectId },
            fields: [
               {name: 'Title'},
               {name: 'DateCreated', type: 'date' }
            ]
        }),

The JSON returned looks like this:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}]

There isn't any reason to convert to ISO 8601 format and back if you don't have to.

查看更多
forever°为你锁心
7楼-- · 2020-02-18 05:59

If you are not tied to the MS JSON serializer you could use Json.NET. It comes with an IsoDateTimeConverter to handle issues with serializing dates. This will serialize dates into an ISO 8601 formatted string.

For instance, in our project serializing myObject is handled via the following code.

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = myObject;

If you decide to take the Json.NET plunge you'll also want to grab JsonNetResult as it returns an ActionResult that can be used in ASP.NET MVC application. It's quite easy to use.

For more info see: Good (Date)Times with Json.NET

查看更多
登录 后发表回答