2010-08-27 29 views
7

Đây là mã jQuery của tôi:Đi qua một ngày với JSON để NET

function onSaveClicked() 
{ 
    var message = 
    { 
     MessageID: $("#MessageID").val() || 0, 
     MessageDate: "\/Date(<%= DateTime.Now.Ticks %>)\/", 
    }; 


    $.ajax({ 
     url: "<%= Url.Action("SaveMessage") %>", 
     type: "POST", 
     dataType: "json", 
     data: $.toJSON(message), 
     contentType: "application/json; charset=utf-8", 
     success: function(result) { 
      if (result && result.success) 
      { 
       // 
      } 
     } 
    }); 
} 

Lúc đầu, tôi chỉ thiết lập MessageDate thành một chuỗi đó là trong một định dạng ngày tháng, nhưng sau khi một số lỗi ở đó, tôi đã làm một số nghiên cứu và có vẻ như tôi cần phải vượt qua trong Ticks. Nhưng tôi nhận được lỗi sau:

Đã xảy ra lỗi khi deserializing đối tượng thuộc loại Models.MessageModel. Giá trị '634185025866884281' không thể được phân tích như kiểu 'DateTime'

Tôi cũng đã thử:

MessageDate: "\\/Date(<%= DateTime.Now.Ticks %>)\\/", 

nhưng tôi nhận được thông báo lỗi này:

Có lỗi deserializing các đối tượng của loại Models.MessageModel. Nội dung Ngày giờ '/ Ngày (634185027273624742) /' không bắt đầu bằng '/ Ngày (' và kết thúc bằng ') /' theo yêu cầu đối với JSON.

Tôi cần làm gì để làm việc này?

EDIT: Tôi đang sử dụng này để deserialize yêu cầu JSON:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    if (filterContext.HttpContext.Request.ContentType.Contains("application/json")) 
    { 
     var serializer = new DataContractJsonSerializer(RootType); 
     //RootType here is (Name = "MessageModel", FullName="Models.MessageModel") 

     filterContext.ActionParameters["message"] = serializer.ReadObject(filterContext.HttpContext.Request.InputStream); 


    } 
} 
+0

Hành động 'SaveMessage' của bạn bằng cách sử dụng để deserialize yêu cầu JSON là gì? –

+0

Tôi đã chỉnh sửa bản gốc của mình, nó hiển thị ở trên ngay bây giờ. – Steven

Trả lời

2

Bạn có thể thử các chức năng sau:

public static string FormatDate(DateTime dt) 
{ 
    var serializer = new DataContractJsonSerializer(typeof(DateTime)); 
    using (var stream = new MemoryStream()) 
    { 
     serializer.WriteObject(stream, dt); 
     return Encoding.Default.GetString(stream.ToArray()); 
    } 
} 

Và theo quan điểm của bạn:

var message = 
{ 
    MessageID: $("#MessageID").val() || 0, 
    MessageDate: "/Date(<%= SomeClass.FormatDate(DateTime.Now) %>)/" 
}; 
+1

Điều này đã cho tôi lỗi sau: Đã xảy ra lỗi khi deserializing đối tượng thuộc loại Models.MessageModel. Không thể phân tích cú pháp giá trị '/ Date (1282924488721' là loại 'Int64' – Steven

+0

Bạn có thể đăng chuỗi JSON được chuyển trong ActionFilter của mình không? Trong ví dụ của bạn, nội dung của 'filterContext.HttpContext.Request.InputStream'. –

+0

Tôi đọc dòng vào một mảng byte, và sau đó chuyển đổi mảng byte thành một chuỗi Đây là kết quả:. "1233477101115115971031017368345848443484105116108101345834116101115116503444346810111599114105112116105111110345834116101115116105110103344434689711610183116971141163458344768971161014047689711610140495056505750565150515654504548524848414741473444346897116101691101003458344768971161014047689711610140495056505750565150515654514548524848414741473444348610511510598108101345810297108115101125" – Steven

1

tôi đã cùng một vấn đề. Những gì tôi đã làm là sử dụng chức năng sau đây để chuyển nó sang một số

private double GetUnixEpoch(DateTime dateTime) 
    { 
     var unixTime = dateTime.ToUniversalTime() - 
      new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

     return unixTime.TotalMilliseconds; 
    } 

Sau đó, bạn có thể sử dụng con số đó trong constructor của đối tượng ngày Javascript để tạo ra các đối tượng ngày.

+1

Bạn có thể chỉ cho tôi một ví dụ về cách tôi sẽ sử dụng nó trong Javascript của tôi không? – Steven

0

This post cho giải pháp này (sửa đổi) mà bạn muốn đặt trên máy khách với JSON.stringify ():

jsonData = JSON.stringify([new Date()], 
    function (k, v) { return this[k] instanceof Date ? '/Date(' + v + ')/' : v; }); 

Hoạt động trong IE, Chrome và Firefox mới nhất cho tôi.

Các vấn đề liên quan