The standard way to accept and return data in ASP.NET world is camel case. But at the current project, I was asked to change my ASP Web API application data processing format. I had to move all the JSON data format from
The reason for it was fact that we had to start developing React application as a SPA of our system. I thought that nothing will be a trouble, but I had met some issues. Now, I want to share with you my solution of how to make your ASP Web API and JSON in the Snake Case be the best friends.
I have implemented in and published a simple template application. A link to the GitHub repository you can find at the end of the article. All the samples will be written for ASP.NET Core built with .net5.
Changing request and response JSON formats
All we need is to change the property naming policy. The standard one is the Camel Case. Changing it is not a difficult task. You should just create a couple of classes and add some settings to your
First, you should create methods to convert property names to the Snake Case. We will use Newtonsoft.Json library feature for the task:
Here we have a couple of useful overloaded methods: the first one accepts a model to serialize and the second one accepts a string value to convert. We use library class
SnakeCaseNamingStrategy for naming policy settings.
Then, we should create a class of NamingPolicy for our Web API application. Let’s create a class
Here we use the method
ToSnakeCase() that we have created in the code above. We use the SnakeCaseNamingPolicy instance in the
Startup.cs file in the
Now our Web API works with the Snake Case: requests and responses are being transformed into JSON with the Snake Case format.
But now we have one minor issue…
The image above represents a validation error. The error’s output format is a mix of Camel Case for keys and the Pascal Case for property names. The behavior of output format was not changed even we have applied a custom name policy.
So, let’s fix the issue.
Changing validation output JSON format
To change the validation output, we should replace a standard state response factory with our custom one. First, we start from the error class that will form our response:
The class accepts a list of validation errors to show them in the response. The class inherits from standard
ProblemDetails class from
Microsoft.AspNetCore.Mvc package. The
RequestId property makes it simpler to find the log record in the log view UI system.
Then, you should replace a standard
InvalidModelStateResponseFactory with our custom one. Here is a replacement class:
And some setting in
Startup.cs should be placed:
Now your validation error output looks like this:
Now, our ASP.NET Core application accepts and returns JSON with the Snake Case format, and validation error output was changed too. Here is a GitHub repository where you can find the implemented solution.