4

Как я могу найти источник этой проблемы, где значение даты, сериализованное JavaScriptSerializer не может быть десериализовано JavaScriptSerializer?JavaScriptSerializer.Deserialize не принимает дату, которая была сериализована JavaScriptSerializer.Serialize

В вызывающем приложении:

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

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

В принимающем приложении:

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

Бросает String was not recognized as a valid DateTime исключение.

Если дата сериализована JavaScriptSerializer, то почему она не может быть десериализована JavaScriptSerializer?

+0

Вы видели этот родственный вопрос: http://stackoverflow.com/questions/1224793/javascript-serialization-of-datetime-in-asp-net-is-not-giving-a-javascript-date? –

+1

Я читал это и много других вопросов, но до сих пор не понимаю, почему .NET не может десериализовать то, что было сериализовано .NET? И я все еще не уверен, что мне нужно делать. Клиентское приложение не мое, поэтому я не могу всегда говорить им, чтобы изменить, как они сериализуют его. –

+0

Попробуйте вместо этого использовать 'System.Runtime.Serialization.Json.DataContractJsonSerializer'. Я просто попробовал, и у него не было проблем с сериализацией и десериализацией дат. – hawkke

ответ

2

Если модель типа Model, попробуйте указать тип в вызове Deserialize.

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

Я могу сериализовать и десериализовать даты без ошибок таким образом.