W MVVMCROSS, w ramach sprawdzania poprawności danych i serializacji, często wchodzą dwa atrybuty: „wymagane” i „jsonRequiredAttribute”. Atrybuty te służą różnym celom i są używane na różnych etapach cyklu życia aplikacji.
Wymagane atrybut
Atrybut „Wymagane” jest częścią przestrzeni nazw „System.componentModel.DataAnnotations” i jest używany do sprawdzania poprawności modelu. Wskazuje, że właściwość musi mieć wartość; W przeciwnym razie model jest uważany za nieprawidłowy. Ten atrybut jest zwykle używany po deserializacji, podczas fazy sprawdzania poprawności modelu. Na przykład w rdzeniu ASP.NET, jeśli właściwość jest ozdobiona „[wymaganą]`, „modelState” będzie nieprawidłowy, jeśli tej właściwości brakuje lub null podczas wiązania modelu.
W MVVMCROSS, podczas gdy atrybut „wymagany” może być używany do walidacji, nie oddziałuje on bezpośrednio z procesami serializacji JSON lub deserializacji. Zamiast tego chodzi bardziej o upewnienie się, że niektóre nieruchomości są wypełnione przed kontynuowaniem logiki biznesowej.
JSONREquiredAttribute
„JsonRequiredAttribute” jest specyficzny dla serializacji i deserializacji JSON. Służy do wskazania, że właściwość musi być obecna w danych JSON podczas deserializacji. Ten atrybut ma kluczowe znaczenie podczas pracy z danymi JSON, ponieważ zapewnia, że wymagane właściwości są zawsze obecne, zapobiegając potencjalnym błędom z powodu brakujących danych.
W MVVMCROSS, podczas korzystania z JSON do nawigacji lub transferu danych między modelami widoku, „JSONREquiredAttribute” zapewnia, że wymagane właściwości są serializowane i prawidłowo deserializowane. Jest to szczególnie ważne, ponieważ MVVMCROSS w dużej mierze opowiada się na JSON w celu przekazania złożonego parametru podczas nawigacji.
Kluczowe różnice
1. Cel:
- „Wymagane jest do ogólnej walidacji modelu, zapewniając, że właściwości są wypełnione po deserializacji.
- „JsonRequiredAttribute” służy specjalnie do zapewnienia obecności właściwości podczas dezerializacji JSON.
2. Etap użytkowania:
- „Wymagane” jest używane podczas walidacji modelu, po deserializacji.
- „JsonRequiredAttribute” jest używany podczas samej deserializacji JSON.
3. Zakres:
- „Wymagane” można używać w różnych formatach danych i scenariuszach sprawdzania poprawności.
- `JSONREquiredAttribute` jest specjalnie dostosowany do obsługi danych JSON.
4. Zachowanie:
- Jeśli brakuje właściwości oznaczonej „wymaganą”, spowoduje błąd sprawdzania poprawności po deserializacji.
- Jeśli brakuje właściwości oznaczonej „jsonRequiredAttribute” podczas Deserializacji JSON, zazwyczaj rzuca wyjątek lub powoduje błąd deserializacji.
Podsumowując, podczas gdy oba atrybuty są wykorzystywane do zapewnienia integralności danych, „Wymagane” dotyczy bardziej ogólnej walidacji modelu, podczas gdy „JSONREquiredAttribute` koncentruje się specjalnie na zapewnieniu obecności danych podczas procesów serializacji JSON i deserializacji w aplikacjach MVVMCross.
Cytaty:[1] https://github.com/mvvmcross/nplus1daysofmvmcross/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-no-core-model-binding-with-json-mpody
[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-no-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.serializacja.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