In MVVMCross komen er bij het omgaan met gegevensvalidatie en serialisatie twee attributen vaak in het spel: `vereist 'en` JSONRequiredAttribute`. Deze attributen dienen verschillende doeleinden en worden in verschillende stadia van de levenscyclus van de toepassing gebruikt.
Vereist kenmerk
Het kenmerk `Vereist` maakt deel uit van de naamruimte` System.componentModel.DatAannotations` en wordt gebruikt voor modelvalidatie. Het geeft aan dat een eigenschap een waarde moet hebben; Anders wordt het model als ongeldig beschouwd. Dit kenmerk wordt meestal gebruikt na deserialisatie, tijdens de modelvalidatiefase. In ASP.NET -kern bijvoorbeeld, als een eigenschap is versierd met `[vereist]`, is de `ModelState` ongeldig als die eigenschap ontbreekt of nietig is tijdens modelbinding.
In MVVMCross kan het kenmerk `vereiste 'worden gebruikt voor validatie, het niet direct in wisselwerking met JSON -serialisatie- of deserialisatieprocessen. In plaats daarvan gaat het meer om ervoor te zorgen dat bepaalde eigenschappen worden ingevuld voordat ze verder gaan met bedrijfslogica.
JsonRequiredAttribute
De `JSONRequiredAttribute` is specifiek voor JSON -serialisatie en deserialisatie. Het wordt gebruikt om aan te geven dat een eigenschap aanwezig moet zijn in de JSON -gegevens tijdens deserialisatie. Dit kenmerk is cruciaal bij het werken met JSON -gegevens, omdat het ervoor zorgt dat de vereiste eigenschappen altijd aanwezig zijn, waardoor potentiële fouten door ontbrekende gegevens worden voorkomen.
In MVVMCross zorgt bij het gebruik van JSON voor navigatie of gegevensoverdracht tussen weergavemodellen, `JsonRequiredAttribute` zorgt ervoor dat de vereiste eigenschappen worden geserialiseerd en correct zijn gedeserialiseerd. Dit is vooral belangrijk omdat MVVMCross sterk afhankelijk is van JSON voor complexe parameters die tijdens de navigatie passeren.
Belangrijkste verschillen
1. Doel:
- `Vereist 'is voor algemene modelvalidatie, ervoor zorgen dat eigenschappen worden ingevuld na deserialisatie.
- `JsonRequiredAttribute` is specifiek om ervoor te zorgen dat eigenschappen aanwezig zijn tijdens JSON -deserialisatie.
2. Gebruiksfase:
- `vereist 'wordt gebruikt tijdens modelvalidatie, na deserialisatie.
- `JsonRequiredAttribute` wordt gebruikt tijdens JSON -deserialisatie zelf.
3. Scope:
- `Vereist 'kan worden gebruikt in verschillende gegevensformaten en validatiescenario's.
- `JsonRequiredAttribute` is specifiek afgestemd op JSON -gegevensverwerking.
4. Gedrag:
- Als een eigenschap die is gemarkeerd met 'vereist' ontbreekt, zal dit resulteren in een validatiefout na deserialisatie.
- Als een eigenschap gemarkeerd met `JSONRequiredAttribute` ontbreekt tijdens JSON -deserialisatie, zal het meestal een uitzondering geven of resulteren in een deserialisatiefout.
Samenvattend, hoewel beide attributen worden gebruikt om gegevensintegriteit te waarborgen, gaat het 'vereist' meer over algemene modelvalidatie, terwijl 'JSONRequiredAttribute' specifiek is gericht op het waarborgen van gegevensaanwezigheid tijdens JSON -serialisatie en deserialisatieprocessen in MVVMCross -toepassingen.
Citaten:[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- Verequired-and-jsonRequired-in-asp-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-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