Ответ 1
Черт, похоже, что в последнее время мне суждено ответить на мои собственные вопросы здесь, в StackOverflow. Вздох, вот решение:
- Установите ServiceStack.Text с помощью NuGet - вы получите более быструю сериализацию JSON бесплатно (пожалуйста)
-
Как только ServiceStack.Text установлен, просто переопределите метод Json в вашем базовом контроллере (у вас есть один, не так ли?):
protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) { return new ServiceStackJsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding }; } public class ServiceStackJsonResult : JsonResult { public override void ExecuteResult(ControllerContext context) { HttpResponseBase response = context.HttpContext.Response; response.ContentType = !String.IsNullOrEmpty(ContentType) ? ContentType : "application/json"; if (ContentEncoding != null) { response.ContentEncoding = ContentEncoding; } if (Data != null) { response.Write(JsonSerializer.SerializeToString(Data)); } } }
-
Кажется, что этот сериализатор по умолчанию делает "правильную вещь" - он не путается с вашими объектами DateTime, если их DateTime.Kind не указан. Тем не менее, я сделал несколько дополнительных настроек настроек в Global.asax(и хорошо знать, как это сделать, прежде чем вы начнете использовать библиотеку):
protected void Application_Start() { JsConfig.DateHandler = JsonDateHandler.ISO8601; JsConfig.TreatEnumAsInteger = true; // rest of the method... }