When returning data to Telerik.UI.for.AspNet.Core 2021.1.224 Html.Kendo().Grid(), from my RoomController.Read() I must set NumberHandling = JsonNumberHandling.Strict to get the data to display in the Html.Kendo().Grid(). In testing, I have found that JsonNumberHandling.Strict not only changes how JSON numbers are formatted but also the capitalization of properties(test results below). When I set jsonResult.SerializerSettings from within the controller function, it works. How can I set the jsonResult.SerializerSettings globally for all calls to JSON()?
Related: Breaking Change ASP.NET Core apps allow deserializing quoted numbers The recommended solution in the article, is my failed Attempt 1 (below). I can't get it to work.
Setting jsonResult.SerializerSettings in controller Read()
public ActionResult Read([DataSourceRequest] DataSourceRequest request)
{
IEnumerable<ApplicationIdentityUser> users
= _applicationDbContext.Users.OrderBy(u => u.UserName);
DataSourceResult dataSourceResult = users.ToDataSourceResult(request);
JsonResult jsonResult = Json(dataSourceResult);
jsonResult.SerializerSettings = new JsonSerializerOptions()
{
NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.Strict
};
return jsonResult;
}
JSON Result
{
"Data": [{
"RoomId": 1,
"RoomCreated": "2018-04-25T15:41:12",
"RoomCreatedBy": "joe",
"RoomEnabled": true,
"RoomName": "1001",
"RoomUpdated": "2021-01-04T16:57:14.6151292",
"RoomUpdatedBy": "mary",
"Units": [],
"Building": {
"BuildingId": 29,
"BuildingCreated": "2018-04-25T15:41:12.5955256",
"BuildingCreatedBy": "joe",
"BuildingEnabled": true,
"BuildingName": "Roberts Hall",
"BuildingUpdated": "2018-04-25T15:41:12.5955256",
"BuildingUpdatedBy": "mary",
"Rooms": []
}}]
}
Attempt 1: Setting jsonResult.SerializerSettings in startup.cs
services.AddControllersWithViews().AddJsonOptions(options => {
options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict;});
Attempt 1: JSON Result
{
"data": [{
"roomId": 1,
"roomCreated": "2018-04-25T15:41:12",
"roomCreatedBy": "Joe",
"roomEnabled": true,
"roomName": "1001",
"roomUpdated": "2021-01-04T16:57:14.6151292",
"roomUpdatedBy": "mary",
"units": [],
"building": {
"buildingId": 29,
"buildingCreated": "2018-04-25T15:41:12.5955256",
"buildingCreatedBy": "joe",
"buildingEnabled": true,
"buildingName": "Roberts Hall",
"buildingUpdated": "2018-04-25T15:41:12.5955256",
"buildingUpdatedBy": "mary",
"rooms": []
}
}]
}
Attempt 2: Setting jsonResult.SerializerSettings in startup.cs
services.AddControllers().AddJsonOptions( options => {
options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.Strict;});
Attempt 2: JSON Result
{
"data": [{
"roomId": 1,
"roomCreated": "2018-04-25T15:41:12",
"roomCreatedBy": "joe",
"roomEnabled": true,
"roomName": "1001",
"roomUpdated": "2021-01-04T16:57:14.6151292",
"roomUpdatedBy": "mary",
"units": [],
"building": {
"buildingId": 29,
"buildingCreated": "2018-04-25T15:41:12.5955256",
"buildingCreatedBy": "joe",
"buildingEnabled": true,
"buildingName": "Roberts Hall",
"buildingUpdated": "2018-04-25T15:41:12.5955256",
"buildingUpdatedBy": "mary",
"rooms": []
}
}]
}