#asp.net #apache-flex #json #actionscript
#asp.net #apache-flex #json #actionscript
Вопрос:
У меня есть даты в формате JSON, которые генерируются из ASP.NET страницы, использующие JSON.NET библиотека. Эти даты выглядят следующим образом:
"LastModifiedDate": "/Date(1301412877000-0400)/"
Как мне проанализировать их с помощью ActionScript из Flex 3 Professional? Я хотел бы иметь это в собственном формате данных.
ПРИМЕЧАНИЕ: Чего я здесь не спрашиваю, так это как мне проанализировать поток JSON с помощью as3corelib. Я десериализовал JSON с помощью этой библиотеки, но даты не декодированы. Вот почему мне нужно знать, как декодировать этот формат даты.
Ответ №1:
Вы захотите использовать JSON-реализацию as3corelib для декодирования вашей строки в объекты.
Комментарии:
1. Это не работает. Я должен был указать, что я использую as3corelib для получения JSON. JSON правильно привязан к моей сетке, но дата расшифрована неправильно. я
2. Это потому, что используемая вами дата нестандартна. as3corelib декодирует формат w3c DTF (ISO 8601) . Вам нужно будет самостоятельно декодировать строку в дату, если вы хотите, чтобы она работала, или изменить реализацию этого формата даты на вашем сервере.
3. Не соответствует спецификациям JSON . Было бы лучше просто отправить число, и поскольку вы уже знаете, что это дата, выполните преобразование на стороне клиента с меткой времени с помощью
new Date(timestamp)
.4. Хорошо, я нашел james.newtonking.com/archive/2009/02/20 / … тоже. Похоже на ASP.NET разработчик должен обновить используемый конвертер.
Ответ №2:
/**
* Converts 'Unix tick' format JSON Date to AS3 Date instances.
* Example json input: "{"BarDate":"/Date(1334672700000)/" }"
* Example json input: "{"BarDate":"/Date(1334672700000 0000)/" }"
*
* @param json date from JSON
* @return Date if conversion possible and worked else null.
*/
public static function parseJSONUnixTickDateToDate(json:String):Date
{
var date:Date = null;
if (json)
{
json = json.substring(json.indexOf("(") 1, json.indexOf(")"));
var arr:Array = json.split(" ");
date = new Date(Number(arr[0]));
}
return date;
}
Ответ №3:
В ASP я использую эту функцию для получения даты в формате Json
public static double JsonTime(DateTime dt)
{//Convert datetime to a Json Datetime
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return Math.Round( ts.TotalMilliseconds,0);
}
и затем в JavaScript я использую:
if (data.indexOf("/Date(")==7)
return new Date( data.replace(/D/g, ''));
чтобы преобразовать обратно в дату, если это поможет
Вы также получите удовольствие от одинарных и двойных кавычек, но, хоть убейте, я не могу найти декодер, который работает на стороне сервера со строками Json в Net Framework 3!
если вы используете String =»u0027″ в своем коде, то строка уже преобразована, и в итоге я написал функцию, которая примерно выполняет эту работу с помощью цикла.
string Padding = "000";
for (int f = 1; f <= 256; f )
{
string Hex = "\u" Padding.Substring(0, 4 - f.ToString().Length) f;
string Dec = "amp;#" Int32.Parse(f.ToString(), NumberStyles.HexNumber) ";";
HTML = HTML.Replace(Hex, Dec);
}
HTML = System.Web.HttpUtility.HtmlDecode(HTML);
Плохо, что я знаю, но если у вас есть ответ получше, пожалуйста, дайте мне знать!