Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Sự khác biệt giữa việc sử dụng thuộc tính cần thiết và JsonRequiredAttribution trong MVVMCROSS


Sự khác biệt giữa việc sử dụng thuộc tính cần thiết và JsonRequiredAttribution trong MVVMCROSS


Trong mvvmcross, khi xử lý xác thực và tuần tự hóa dữ liệu, hai thuộc tính thường xuất hiện: `` abelion` và `jsonRequiredAttribution`. Các thuộc tính này phục vụ các mục đích khác nhau và được sử dụng ở các giai đoạn khác nhau của vòng đời ứng dụng.

Thuộc tính cần thiết

Thuộc tính `Yêu cầu` là một phần của không gian tên` system.componentModel.dataannotations` và được sử dụng để xác thực mô hình. Nó chỉ ra rằng một thuộc tính phải có một giá trị; Nếu không, mô hình được coi là không hợp lệ. Thuộc tính này thường được sử dụng sau khi giải phóng hóa, trong giai đoạn xác thực mô hình. Ví dụ, trong ASP.NET Core, nếu một thuộc tính được trang trí bằng `[Yêu cầu]`, `modelState` sẽ không hợp lệ nếu thuộc tính đó bị thiếu hoặc vô hiệu hóa trong quá trình ràng buộc mô hình.

Trong MVVMCROSS, trong khi thuộc tính `abeled` có thể được sử dụng để xác thực, nó không tương tác trực tiếp với các quá trình tuần tự hóa hoặc khử hóa JSON. Thay vào đó, đó là nhiều hơn về việc đảm bảo rằng các thuộc tính nhất định được điền trước khi tiến hành logic kinh doanh.

JsonRequiredAttribution

`JsonRequiredAttribution` là đặc trưng cho việc tuần tự hóa và giải phóng JSON. Nó được sử dụng để chỉ ra rằng một tài sản phải có trong dữ liệu JSON trong quá trình khử dịch. Thuộc tính này là rất quan trọng khi làm việc với dữ liệu JSON, vì nó đảm bảo rằng các thuộc tính cần thiết luôn có mặt, ngăn ngừa các lỗi tiềm ẩn do thiếu dữ liệu.

Trong MVVMCROSS, khi sử dụng JSON để điều hướng hoặc truyền dữ liệu giữa các mô hình xem, `jsonRequiredAttribution` đảm bảo rằng các thuộc tính cần thiết được nối tiếp và giảm dần chính xác. Điều này đặc biệt quan trọng vì MVVMcross phụ thuộc rất nhiều vào JSON để chuyển tham số phức tạp trong quá trình điều hướng.

Sự khác biệt chính

1. Mục đích:
- `Yêu cầu` là để xác thực mô hình chung, đảm bảo các thuộc tính được điền sau khi khử khử.
- `JsonRequiredAttribution` là đặc biệt để đảm bảo các thuộc tính có mặt trong quá trình giải phóng JSON.

2. Giai đoạn sử dụng:
- `Yêu cầu` được sử dụng trong quá trình xác nhận mô hình, sau khi khử khử.
- `JsonRequiredAttribution` được sử dụng trong chính sự khử thuốc của JSON.

3. Phạm vi:
- `Yêu cầu` có thể được sử dụng trên các định dạng dữ liệu khác nhau và các kịch bản xác thực.
- `JsonRequiredAttribution` được điều chỉnh cụ thể để xử lý dữ liệu JSON.

4. Hành vi:
- Nếu một thuộc tính được đánh dấu bằng 'Yêu cầu` bị thiếu, nó sẽ dẫn đến một lỗi xác thực sau khi giảm dần.
- Nếu một thuộc tính được đánh dấu bằng `JsonRequiredAttribution` bị thiếu trong quá trình khử Deserialization của JSON, thì nó thường sẽ đưa ra một ngoại lệ hoặc dẫn đến lỗi khử hóa.

Tóm lại, trong khi cả hai thuộc tính được sử dụng để đảm bảo tính toàn vẹn của dữ liệu, `abeled` là nhiều hơn về xác thực mô hình chung, trong khi` jsonRequiredAttribution` được tập trung đặc biệt vào việc đảm bảo sự hiện diện dữ liệu trong quá trình tuần tự hóa và giải phóng hóa JSON trong các ứng dụng MVVMCROSS.

Trích dẫn:
[1] https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/blob/master/N-39-CrossLight-Touch/CrossLightTouch/Properties/Annotations.cs
[2] https://www.mvvmcross.com/documentation/plugins/json
[3] https://stackoverflow.com/questions/49237767/using-required-and-jsonrequired-in-asp-net-core-model-binding-with-json-body
[4] https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/generators/observableproperty
[5] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
.
[7] https://www.mvvmcross.com/documentation/platform/android/android-view-presenter
[8] https://www.mvvmcross.com/Documentation
[9] https://learn.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonrequiredattribute?view=net-9.0
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[11] https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-9.0