Dans MVVMCross, lorsqu'ils traitent de la validation et de la sérialisation des données, deux attributs entrent souvent en jeu: «requis» et «JSONRequiredAttribute». Ces attributs servent des objectifs différents et sont utilisés à différentes étapes du cycle de vie de l'application.
Attribut requis
L'attribut `requis 'fait partie de l'espace de noms` System.ComponentModel.Dataannotations' et est utilisé pour la validation du modèle. Il indique qu'une propriété doit avoir une valeur; Sinon, le modèle est considéré comme invalide. Cet attribut est généralement utilisé après désérialisation, pendant la phase de validation du modèle. Par exemple, dans ASP.NET Core, si une propriété est décorée avec `[requise]`, le «ModelState» ne sera pas valide si cette propriété est manquante ou nul pendant la liaison du modèle.
Dans MVVMCross, bien que l'attribut `` requis '' puisse être utilisé pour la validation, il n'interagit pas directement avec les processus de sérialisation ou de désérialisation JSON. Au lieu de cela, il s'agit davantage de garantir que certaines propriétés sont peuplées avant de procéder à la logique métier.
JSONRequiredAttribute
Le `JSONRequiredAttribute» est spécifique à la sérialisation et à la désérialisation JSON. Il est utilisé pour indiquer qu'une propriété doit être présente dans les données JSON pendant la désérialisation. Cet attribut est crucial lorsque vous travaillez avec les données JSON, car il garantit que les propriétés requises sont toujours présentes, empêchant les erreurs potentielles en raison de données manquantes.
Dans MVVMCross, lors de l'utilisation de JSON pour la navigation ou le transfert de données entre les modèles de vue, «JSONRequiredAttribute» garantit que les propriétés requises sont sérialisées et désérialisées correctement. Ceci est particulièrement important car MVVMCross s'appuie fortement sur JSON pour le passage des paramètres complexes pendant la navigation.
Différences clés
1. Objectif:
- «requis» est pour la validation générale du modèle, garantissant que les propriétés sont peuplées après désérialisation.
- `JSONRequiredAttribute` est spécifiquement pour garantir que des propriétés sont présentes pendant la désérialisation JSON.
2. Étape d'utilisation:
- «requis» est utilisé pendant la validation du modèle, après désérialisation.
- `JSONRequiredAttribute` est utilisé pendant la désérialisation JSON elle-même.
3. Portée:
- «requis» peut être utilisé dans divers formats de données et scénarios de validation.
- `JSONRequiredAttribute` est spécifiquement adapté à la gestion des données JSON.
4. Comportement:
- Si une propriété marquée par «requise» est manquante, elle entraînera une erreur de validation après désérialisation.
- Si une propriété marquée de «JSONRequiredAttribute» manque pendant la désérialisation JSON, elle lancera généralement une exception ou entraînera une erreur de désérialisation.
En résumé, bien que les deux attributs soient utilisés pour garantir l'intégrité des données, «requis» concerne davantage la validation du modèle général, tandis que «JSONRequiredAttribute» est spécifiquement axé sur la présence des données lors des processus de sérialisation et de désérialisation JSON dans les applications MVVMCROSS.
Citations:[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
[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