Есть довольно много ответов для обработки клиентской стороны, но вы можете изменить выходную серверную сторону, если хотите.
Есть несколько способов приблизиться к этому, я начну с основы. Вам придется подклассифицировать класс JsonResult и переопределить метод ExecuteResult. Оттуда вы можете использовать несколько разных подходов для изменения сериализации.
Подход 1: Реализация по умолчанию использует JsonScriptSerializer . Если вы посмотрите на документацию, вы можете использовать метод RegisterConverters для добавления пользовательских JavaScriptConverters . Есть несколько проблем с этим: JavaScriptConverter сериализуется в словаре, то есть он берет объект и сериализуется в Json-словаре. Чтобы сделать сериализацию объекта строкой, требуется бит хакера, см. post .
public class CustomJsonResult : JsonResult
{
private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/json";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
// Use your custom JavaScriptConverter subclass here.
serializer.RegisterConverters(new JavascriptConverter[] { new CustomConverter });
response.Write(serializer.Serialize(Data));
}
}
}
Подход 2 (рекомендуется): Второй подход - начать с переопределенного JsonResult и пойти с другим сериализатором Json, в моем случае Json .NET сериализатор. Это не требует взлома подхода 1. Вот моя реализация подкласса JsonResult:
public class CustomJsonResult : JsonResult
{
private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/json";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
// Using Json.NET serializer
var isoConvert = new IsoDateTimeConverter();
isoConvert.DateTimeFormat = _dateFormat;
response.Write(JsonConvert.SerializeObject(Data, isoConvert));
}
}
}
Пример использования:
[HttpGet]
public ActionResult Index() {
return new CustomJsonResult { Data = new { users=db.Users.ToList(); } };
}
Дополнительные кредиты: Джеймс Newton-King
Генерируйте число во время сборки и запишите это в файл. Каждый раз, когда Вы делаете выпуск, фиксируете тот файл с комментарием, "Создают 147" (или независимо от того, что номер сборки в настоящее время). Не фиксируйте файл во время нормальной разработки. Таким образом, можно легко отобразиться между номерами сборки и версиями в Мерзавце.
Существует хороший сценарий помощника, который люди Мерзавца используют, чтобы помочь генерировать полезный номер версии на основе Мерзавца, описывают. Я показываю сценарий и объясняю это в моем ответе на то, Как Вы включали бы текущий идентификатор фиксации в Мерзавца файлы проекта?.
Вы не первый, который будет думать о "числе пересмотра" в Мерзавце, но'wc
'довольно опасно, так как фиксация может быть стерта или раздавлена, и пересмотренная история.
"Число пересмотра" было особенно важно для Подверсии, так как это было необходимо в случае слияния (SVN1.5, и 1.6 изменили к лучшему ту переднюю сторону).
Вы могли закончить с рычагом перед фиксацией, который будет включать число пересмотра в комментарий с алгоритмом, не включающим поиск всей истории ответвления для определения корректного числа.
Базар на самом деле придумал такой алгоритм, и это может быть хорошая начальная точка для того, что Вы хотите сделать.
(Как ответ Мороженого указывает, у Мерзавца есть на самом деле собственный алгоритм, на основе последнего тега, плюс количество фиксаций, плюс что-то вроде ключа SHA-1). Необходимо видеть (и upvote) его ответ, если он работает на Вас.
Для иллюстрирования идеи Aaron можно также добавить хеш фиксации Мерзавца в "информационный" файл приложения, Вы являетесь распределительными со своим приложением.
Тот путь, о поле был бы похож:
Применимое число является частью фиксации, но "информационный" файл 'приложения' сгенерирован во время упаковочного процесса, эффективно связав применимый номер сборки с техническим идентификатором пересмотра.
Если Вы ищете уникальный и все еще довольно читаемый идентификатор для фиксаций, мерзавец описывают, могла бы быть просто вещь для Вас.