Я смотрел несколько сообщений на SO о том, как десериализовать дату в строке json.deserialize json string, содержащая дату
В сообщениях упоминается замена на строку для форматирования частей даты.
строка JSON выглядит следующим образом:
"/Date(1336258800000)/\"
, по-видимому, что мне нужно, чтобы добраться до это:
"new Date(1336258800000)"
Беда в том, как только я пытаюсь и к замене или IndexOf ')/\' он не находит заменяемую строку (indexOf is -1)
может ли кто-нибудь увидеть, что я делаю неправильно?
JavaScriptSerializer jss = new JavaScriptSerializer();
//Fix an issue with Json Dates
string json = eventArgument.Replace(@"/Date(", "new Date(").Replace(@")/\", ")");
int index = json.IndexOf(@")/\", 0);
WorkPattern wp = jss.DeserializeObject(json) as WorkPattern;
вот полный JSON строку:
"{\"WorkPatternDays\":[{\"WorkPatternDayShifts\":[{\"WorkPatternDayShiftRates\":[{\"Duration\":8.5,\"Sequence\":0,\"WorkPatternDayShiftID\":186,\"WorkPatternDayShiftRateID\":105,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"}],\"WorkPatternDayShiftBreaks\":[{\"PaidBreak\":true,\"Duration\":1,\"EndTime\":\"/Date(1336050000000)/\",\"StartTime\":\"/Date(1336046400000)/\",\"WorkPatternDayShiftID\":186,\"WorkPatternDayShiftBreakID\":284,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"},{\"PaidBreak\":false,\"Duration\":0.25,\"EndTime\":\"/Date(1336058100000)/\",\"StartTime\":\"/Date(1336057200000)/\",\"WorkPatternDayShiftID\":186,\"WorkPatternDayShiftBreakID\":285,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"}],\"Duration\":8.5,\"EndTime\":\"/Date(1336062600000)/\",\"StartTime\":\"/Date(1336032000000)/\",\"WorkPatternDayID\":186,\"WorkPatternDayShiftID\":186,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"}],\"DayOfWeek\":1,\"DayOfWeekNumber\":1,\"WorkPatternID\":105,\"WorkPatternDayID\":186,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"},{\"WorkPatternDayShifts\":[{\"WorkPatternDayShiftRates\":[],\"WorkPatternDayShiftBreaks\":[{\"PaidBreak\":true,\"Duration\":0.5,\"EndTime\":\"/Date(1336041000000)/\",\"StartTime\":\"/Date(1336039200000)/\",\"WorkPatternDayShiftID\":187,\"WorkPatternDayShiftBreakID\":286,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"}],\"Duration\":5.5,\"EndTime\":\"/Date(1336046400000)/\",\"StartTime\":\"/Date(1336026600000)/\",\"WorkPatternDayID\":187,\"WorkPatternDayShiftID\":187,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"}],\"DayOfWeek\":3,\"DayOfWeekNumber\":3,\"WorkPatternID\":105,\"WorkPatternDayID\":187,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"}],\"WorkPatternName\":\"Naths Test Work Pattern\",\"WorkPatternID\":105,\"Deleted\":false,\"UpdatedUser\":\"\",\"UpdatedDate\":\"/Date(1336258800000)/\"}"
Немного больше информации, чтобы увидеть, как все это совмещается:
код позади:
public override void DataBind()
{
try
{
if (this.WorkPattern != null)
{
//Create a javascript serializer
JavaScriptSerializer jss = new JavaScriptSerializer();
//Get the serialised object as a json string
string json = jss.Serialize(this.WorkPattern);
//Run the jquery code
base.RunjQueryCode(
String.Format("loadWorkPattern({0});", json));
jss = null;
}
}
catch (Exception)
{
throw;
}
}
protected override void HandlePostbacks(string eventTarget, string eventArgument)
{
try
{
switch (eventTarget)
{
case "Save":
JavaScriptSerializer jss = new JavaScriptSerializer();
//Fix an issue with Json Dates
string json = eventArgument.Replace(@"/Date(", "new Date(").Replace(@")/\", ")");
int index = json.IndexOf(@")/\\", 0);
WorkPattern wp = jss.DeserializeObject(json) as WorkPattern;
object o = jss.Deserialize<WorkPattern>(json);
break;
default: break;
}
base.HandlePostbacks(eventTarget, eventArgument);
}
catch (Exception)
{
throw;
}
}
пометок/JS :
function loadWorkPattern(jsonData) {
//Store the work pattern
_workPattern = jsonData;
//Loop through the work pattern days
$.each(_workPattern.WorkPatternDays, function (key, workPatternDay) {
//Loop through each shift
$.each(workPatternDay.WorkPatternDayShifts, function (key, workPatternShift) {
addShift(workPatternShift, workPatternDay.DayOfWeekNumber);
//Loop through each break
$.each(workPatternShift.WorkPatternDayShiftBreaks, function (key, workPatternDayShiftBreak) {
addBreak(workPatternDayShiftBreak);
});
});
});
}
function saveWorkPattern() {
__doPostBack('Save', JSON.stringify(_workPattern));
}
Im вызывает JSON.stringify для сериализации сериализованного хранимого объекта перед отправкой обратно на сервер, это то, что я делаю неправильно?
UPDATE
Это рабочий код:
string json = eventArgument.Replace(@"/Date(", "\\/Date(").Replace(@")/", ")\\/");
Вы отправляете его клиенту или на сервер? Http: // StackOverflow.com/questions/1224793/javascript-serialization-of-datetime-in-asp-net-is-not-giving-a-javascript-date/1227767 # 1227767 может быть то, что после –
правильный формат десериализации, который работал для меня: '" \ "\\/Date (1336302055941) \\/\" "' –
@ petrov.alex - ОК, получил это .. это работает: строка json = eventArgument.Replace (@ "/ Date (", "\\/Date (") .Replace (@ ") /", ") \\ /"); – WraithNath