Это расстраивает. Мое решение состояло в том, чтобы разобрать «/ и /» из значения, сгенерированного JavaScriptSerializer ASP.NET, так что, хотя JSON может не иметь литерала даты, он все равно будет интерпретироваться браузером как дата, и это все, что я на самом деле want: {"myDate":Date(123456789)}
Пользовательский JavaScriptConverter для DateTime?
Я должен подчеркнуть точность комментария Роя Тинкера. Это не законный JSON. Это грязный, грязный хак на сервере, чтобы удалить проблему, прежде чем она станет проблемой для JavaScript. Он захлебнется парсером JSON. Я использовал это для того, чтобы оторваться от земли, но я больше не использую это. Тем не менее, я все еще чувствую, что лучший ответ заключается в изменении того, как сервер форматирует дату, например, ISO, как упоминалось в другом месте.
Вот код для вы ... Дайте мне знать, если вам нужно больше объяснений.
/// <summary>
/// Calculates the Y-value (inverse Gudermannian function) for a latitude.
/// <para><see cref="http://en.wikipedia.org/wiki/Gudermannian_function"/></para>
/// </summary>
/// <param name="latitude">The latitude in degrees to use for calculating the Y-value.</param>
/// <returns>The Y-value for the given latitude.</returns>
public static double GudermannianInv(double latitude)
{
double sign = Math.Sign(latitude);
double sin = Math.Sin(latitude * RADIANS_PER_DEGREE * sign);
return sign * (Math.Log((1.0 + sin) / (1.0 - sin)) / 2.0);
}
/// <summary>
/// Returns the Latitude in degrees for a given Y.
/// </summary>
/// <param name="y">Y is in the range of +PI to -PI.</param>
/// <returns>Latitude in degrees.</returns>
public static double Gudermannian(double y)
{
return Math.Atan(Math.Sinh(y)) * DEGREES_PER_RADIAN;
}
Как насчет деревьев выражений ? Они составляют основу LINQ и позволяют отложить выполнение:
Взято из блога Дэвида Хайдена :
В C # 3.0 вы можете определить делегата следующим образом, используя лямбда-выражение:
Func<int,int> f = x => x + 1;
This делегат компилируется в исполняемый код в вашем приложении и может вызываться как таковой:
var three = f(2); // 2 + 1
Код работает, как и следовало ожидать. Здесь нет ничего особенного.
Деревья выражений
Когда вы определяете делегат как дерево выражений с помощью System.Query.Expression:
Expression<Func<int,int>> expression = x => x + 1;
Делегат больше не компилируется в исполняемый код, а компилируется как данные, которые можно преобразовать и скомпилирован в исходный делегат.
Чтобы действительно использовать делегат, представленный в виде дерева выражений в вашем приложении, вам нужно будет скомпилировать и вызвать его в своем приложении: проекция Меркатора с использованием сферической модели Земли, а не более медленных и более сложных эллиптических уравнений.
Преобразования доступны как часть кода OpenLayers: