În MVVMcross, atunci când se ocupă de validarea și serializarea datelor, de multe ori intră în joc două atribute: `Obligatoriu` și` JSONREQUIDATTTRIBUTE`. Aceste atribute servesc scopuri diferite și sunt utilizate în diferite etape ale ciclului de viață al aplicației.
atribut necesar
Atributul „necesar” face parte din spațiul de nume `System.ComponentModel.DataAnnotations` și este utilizat pentru validarea modelului. Acesta indică faptul că o proprietate trebuie să aibă o valoare; În caz contrar, modelul este considerat nevalid. Acest atribut este utilizat de obicei după deserializare, în faza de validare a modelului. De exemplu, în ASP.NET Core, dacă o proprietate este decorată cu `[Obligatoriu]`, `ModelState` va fi invalid dacă această proprietate lipsește sau este nulă în timpul legării modelului.
În MVVMcross, în timp ce atributul „necesar” poate fi utilizat pentru validare, acesta nu interacționează direct cu procesele de serializare sau deserializare JSON. În schimb, este vorba mai mult de a se asigura că anumite proprietăți sunt populate înainte de a continua cu logica de afaceri.
JSONREQUIREDATTRIBUTE
`JsonRequiredAttribute` este specific serializării și deserializării JSON. Este utilizat pentru a indica faptul că o proprietate trebuie să fie prezentă în datele JSON în timpul deserializării. Acest atribut este crucial atunci când lucrați cu datele JSON, deoarece se asigură că proprietățile necesare sunt întotdeauna prezente, prevenind erorile potențiale din cauza datelor lipsă.
În MVVMcross, atunci când se utilizează JSON pentru navigare sau transfer de date între modelele de vizualizare, `JSONREQUIREDATTRIBUTE` se asigură că proprietățile necesare sunt serializate și deserializate corect. Acest lucru este deosebit de important, deoarece MVVMCross se bazează foarte mult pe JSON pentru trecerea parametrilor complexi în timpul navigației.
Diferențe cheie
1. Scopul:
- „Obligatoriu” este pentru validarea generală a modelului, asigurând că proprietățile sunt populate după deserializare.
- `JsonRequiredAttribute` este special pentru asigurarea proprietăților prezente în timpul deserializării JSON.
2. Etapa de utilizare:
- „Obligatoriu” este utilizat în timpul validării modelului, după deserializare.
- `JsonRequiredAttribute` este utilizat în timpul deserializării JSON în sine.
3. Domeniu de aplicare:
- „Obligatoriu” poate fi utilizat în diferite formate de date și scenarii de validare.
- `JsonRequiredAttribute` este adaptat special pentru gestionarea datelor JSON.
4. Comportament:
- Dacă lipsește o proprietate marcată cu „Obligatoriu”, va duce la o eroare de validare după deserializare.
- Dacă o proprietate marcată cu `jsonRequiredAttribute` lipsește în timpul deserializării JSON, aceasta va arunca în mod obișnuit o excepție sau va duce la o eroare de deserializare.
În rezumat, în timp ce ambele atribute sunt utilizate pentru a asigura integritatea datelor, „Obligatoriu” se referă mai mult la validarea generală a modelului, în timp ce `JSONREQUIDATTRIBUTE` este concentrat în mod specific pe asigurarea prezenței datelor în timpul proceselor de serializare și deserializare JSON în aplicațiile MVVMcross.
Citări:[1] https://github.com/mvvmcross/nplus1daysofmvvmcross/blob/master/n-39-crosslight-gouch/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
[6] https://www.strathweb.com/2017/12/required-and-bindrequired-in-asp-net-core-mvc/
[7] https://www.mvvmcross.com/documentation/platform/android/android-view-presenter
[8] https://www.mvvmcross.com/documentation/fundamentals/navigation
[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