JSON nên là trường hợp CamelCase hay Pascal?

ASP. NET Core Web API và bộ điều khiển thường cần tuần tự hóa dữ liệu JSON thành ứng dụng khách JavaScript. Về phía máy chủ, các lớp C# của bạn thường sử dụng Vỏ Pascal để đặt tên cho thuộc tính trong khi mã JavaScript thường sử dụng Vỏ lạc đà cho tên thuộc tính. Do đó, sẽ rất đáng để xem nhanh cách ASP. NET Core tuần tự hóa dữ liệu ở định dạng JSON từ API Web và bộ điều khiển MVC

Có ba vị trí phổ biến mà các đối tượng C# được tuần tự hóa ở định dạng JSON cho máy khách

  • Bộ điều khiển API web
  • bộ điều khiển MVC
  • Mã C# tùy chỉnh sử dụng JsonSerializer

Vỏ lạc đà và API Web

Trước tiên chúng ta hãy xem hành vi của ASP. NET Core Web API khi nói đến tuần tự hóa JSON

Hãy xem xét bộ điều khiển API Web sau

[ApiController]
[Route("[controller]")]
public class EmployeeController : ControllerBase
{
 
    [HttpGet]
    public List Get()
    {
        List empList = 
new List();
        empList.Add(new Employee() 
{ EmployeeID=1,FirstName="Nancy", 
LastName="Davolio" });
        empList.Add(new Employee() 
{ EmployeeID = 2, FirstName = "Andrew", 
LastName = "Fuller" });
        return empList;

    }
}

Mã này chỉ đơn giản trả về Danh sách các đối tượng Nhân viên cho người gọi. Lớp Nhân viên được sử dụng trong mã này trông như thế này

public class Employee
{
    public int EmployeeID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Nếu bạn chạy hành động Get() từ trình duyệt, API Web sẽ trả về dữ liệu JSON như bên dưới

JSON nên là trường hợp CamelCase hay Pascal?

Chú ý đầu ra này một cách cẩn thận. Bạn sẽ thấy rằng tên thuộc tính đã tự động chuyển đổi thành trường hợp lạc đà tương đương của chúng. Ví dụ: EmployeeID trở thành employeeID và FirstName trở thành FirstName. Điều này có nghĩa là theo mặc định, API Web tuần tự hóa dữ liệu JSON bằng cách sử dụng vỏ lạc đà

Nếu bạn không muốn chuyển đổi tự động này thì sao?

Hãy định cấu hình hành vi đó ngay bây giờ

Mở lớp Startup và sửa đổi phương thức ConfigureServices() như bên dưới

public void ConfigureServices
(IServiceCollection services)
{
    services.AddControllers()
            .AddJsonOptions(options =>
                {
                    options.JsonSerializerOptions
.PropertyNamingPolicy = null;
                });
}

Như bạn có thể thấy, mã sử dụng phương thức AddJsonOptions() để định cấu hình hành vi này. Thuộc tính PropertyNamingPolicy của JsonSerializerOptions được đặt thành null. Sau khi thay đổi cài đặt này, nếu bạn chạy lại API Web, bạn sẽ nhận được kết quả sau

JSON nên là trường hợp CamelCase hay Pascal?

Lưu ý rằng lần này cách viết hoa tên thuộc tính được giữ nguyên như trong lớp C#

Nếu bạn muốn đặt vỏ thành vỏ lạc đà một cách rõ ràng thì bạn có thể viết

options.JsonSerializerOptions.
ropertyNamingPolicy = JsonNamingPolicy.CamelCase;

Vỏ lạc đà và bộ điều khiển MVC

trong ASP. NET Core MVC, bạn có thể sử dụng phương thức Json() để tuần tự hóa định dạng JSON của dữ liệu. Hãy xem xét hành động sau đây cho thấy điều này có thể được thực hiện như thế nào

public class HomeController : Controller
{
    public IActionResult Index()
    {
        List empList = 
new List();
        empList.Add(new Employee() 
{ EmployeeID = 1, FirstName = "Nancy",
 LastName = "Davolio" });
        empList.Add(new Employee() 
{ EmployeeID = 2, FirstName = "Andrew", 
LastName = "Fuller" });
        return Json(empList);
    }
}

Hành động Index() tạo Danh sách các đối tượng Nhân viên. EmpList sau đó được tuần tự hóa cho máy khách bằng phương thức Json()

Nếu bạn chạy mã này với cấu hình mặc định, bạn sẽ nhận được đầu ra sau

JSON nên là trường hợp CamelCase hay Pascal?

Như bạn có thể thấy tên thuộc tính sử dụng vỏ lạc đà. Hành vi này tương tự như hành vi API Web

Để hướng dẫn MVC ngừng sử dụng vỏ lạc đà, bạn có thể viết mã này vào ConfigureServices()

services.AddControllersWithViews()
        .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions
.PropertyNamingPolicy = null;
            });

Bạn đã sử dụng phương thức AddJsonOptions() trên AddControllersWithViews()

Và đây là đầu ra

 

JSON nên là trường hợp CamelCase hay Pascal?

Bạn có thể đặt thuộc tính PropertyNamingPolicy thành JsonNamingPolicy. CamelCase để đặt vỏ thuộc tính thành vỏ lạc đà một cách rõ ràng

Bạn cũng có thể thay đổi hành vi này cho các lệnh gọi Json() riêng lẻ như hình bên dưới

var options = new JsonSerializerOptions()
{
    PropertyNamingPolicy = 
JsonNamingPolicy.CamelCase
};
return Json(empList, options);

Ở đây, mã tạo một đối tượng của lớp JsonSerializerOptions. Sau đó, nó đặt thuộc tính PropertyNamingPolicy thành JsonNamingPolicy. Trường hợp lạc đà. Cuối cùng, đối tượng tùy chọn được truyền dưới dạng tham số thứ hai của phương thức Json(). Cài đặt này sẽ được ưu tiên hơn cài đặt được chỉ định trong ConfigureServices()

Mã tùy chỉnh sử dụng JsonSerializer

Đôi khi bạn cần tự tuần tự hóa dữ liệu thông qua mã tùy chỉnh. Thông thường, bạn sẽ sử dụng JsonSerializer để hoàn thành tác vụ này. Hãy xem xét đoạn mã sau

public IActionResult Index()
{
    List empList = 
new List();
    empList.Add(new Employee() 
{ EmployeeID = 1, FirstName = "Nancy", 
LastName = "Davolio" });
    empList.Add(new Employee() 
{ EmployeeID = 2, FirstName = "Andrew", 
LastName = "Fuller" });

    string json = JsonSerializer.Serialize(empList);
    return Ok(json);
}

Ở đây bạn đã sử dụng lớp JsonSerializer để tuần tự hóa empList thành chuỗi JSON. Chuỗi sau đó được trả về máy khách bằng cách gói nó trong phương thức Ok()

Đầu ra của hành động này trong trình duyệt trông như thế này

JSON nên là trường hợp CamelCase hay Pascal?

Như bạn có thể thấy, phương thức Serialize() của JsonSerializer không sử dụng vỏ lạc đà theo mặc định

Nếu bạn muốn lớp JsonSerializer sử dụng vỏ lạc đà, bạn có thể làm như sau

________số 8

Như bạn có thể thấy, mã tạo đối tượng JsonSerializerOptions và đặt thuộc tính PropertyNamingPolicy thành JsonNamingPolicy. Trường hợp lạc đà. Sau đó, phương thức Serialize() được gọi bằng cách truyền đối tượng empList và JsonSerializerOptions

JSON có phải là trường hợp camelCase hay pascal không?

Mọi thông báo dựa trên JSON PHẢI tuân thủ các quy tắc sau. 1. Tất cả các tên trường JSON PHẢI tuân theo Quy ước đặt tên ( camelCase , tiếng Anh Mỹ, v.v. )

Tôi có nên sử dụng camelCase trong JSON không?

Sử dụng kiểu chữ hoa lạc đà cho tất cả các tên thuộc tính JSON . Áp dụng cho serialization và deserialization.

Tôi nên sử dụng Pascalcase hay camelCase?

Vỏ Pascal tương tự như vỏ lạc đà. Sự khác biệt duy nhất giữa hai loại này là trường hợp pascal yêu cầu chữ cái đầu tiên của từ đầu tiên cũng phải được viết hoa . Vì vậy, khi sử dụng kiểu chữ hoa pascal, mỗi từ bắt đầu bằng một chữ cái viết hoa (ngược lại với kiểu chữ hoa lạc đà, trong đó từ đầu tiên được viết thường).

JSON có nên được viết hoa không?

Bạn không cần phải là. Chắc hẳn bạn đã học các quy tắc viết hoa trong trường ngữ pháp của mình, nhưng tìm kiếm trong thế giới thực không quá nhạy cảm với cách viết hoa