Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ποιες είναι οι διαφορές μεταξύ της χρήσης του απαιτούμενου χαρακτηριστικού και του jsonRequiredattribute στο MVVMCross


Ποιες είναι οι διαφορές μεταξύ της χρήσης του απαιτούμενου χαρακτηριστικού και του jsonRequiredattribute στο MVVMCross


Στο MVVMCROSS, όταν ασχολούνται με την επικύρωση δεδομένων και τη σειριοποίηση, δύο χαρακτηριστικά συχνά μπαίνουν στο παιχνίδι: `imized` και` JsonRequiredattribute`. Αυτά τα χαρακτηριστικά εξυπηρετούν διαφορετικούς σκοπούς και χρησιμοποιούνται σε διαφορετικά στάδια του κύκλου ζωής της εφαρμογής.

Απαιτείται χαρακτηριστικό

Το χαρακτηριστικό `απαιτείται 'είναι μέρος του χώρου ονομάτων` system.componentmodel.DataAnnotations' και χρησιμοποιείται για την επικύρωση του μοντέλου. Υποδεικνύει ότι μια ιδιοκτησία πρέπει να έχει αξία. Διαφορετικά, το μοντέλο θεωρείται άκυρο. Αυτό το χαρακτηριστικό χρησιμοποιείται τυπικά μετά την αποταμιευοποίηση, κατά τη διάρκεια της φάσης επικύρωσης του μοντέλου. Για παράδειγμα, στο ASP.NET Core, εάν μια ιδιότητα είναι διακοσμημένη με `[απαιτείται]`, το 'ModelState' θα είναι άκυρο εάν η ιδιότητα αυτή λείπει ή δεν είναι μηδενική κατά τη δέσμευση μοντέλου.

Στο MVVMCROSS, ενώ το χαρακτηριστικό `που απαιτείται 'μπορεί να χρησιμοποιηθεί για επικύρωση, δεν αλληλεπιδρά άμεσα με τις διαδικασίες σειριοποίησης ή αποταμιευτικοποίησης JSON. Αντ 'αυτού, είναι περισσότερο για να διασφαλιστεί ότι ορισμένες ιδιότητες είναι συμπληρωμένες πριν προχωρήσουν στην επιχειρηματική λογική.

jsonRequiredattribute

Το `jsonRequiredattribute` είναι ειδικό για τη σειριοποίηση και την αποταμιευοποίηση του JSON. Χρησιμοποιείται για να υποδείξει ότι μια ιδιότητα πρέπει να υπάρχει στα δεδομένα JSON κατά τη διάρκεια της αποταμιευτικοποίησης. Αυτό το χαρακτηριστικό είναι ζωτικής σημασίας όταν εργάζεστε με δεδομένα JSON, καθώς εξασφαλίζει ότι οι απαιτούμενες ιδιότητες είναι πάντα παρόντες, αποτρέποντας τα πιθανά σφάλματα λόγω των ελλειπουσών δεδομένων.

Στο MVVMCross, όταν χρησιμοποιείτε JSON για πλοήγηση ή μεταφορά δεδομένων μεταξύ μοντέλων προβολής, το `jsonRequiredattribute` εξασφαλίζει ότι οι απαιτούμενες ιδιότητες είναι σειριοποιημένες και αποταμιευμένες σωστά. Αυτό είναι ιδιαίτερα σημαντικό, διότι το MVVMCROSS βασίζεται σε μεγάλο βαθμό στο JSON για πολύπλοκη παράμετρο που διέρχεται κατά τη διάρκεια της πλοήγησης.

βασικές διαφορές

1 Σκοπός:
- `Απαιτείται 'είναι για γενική επικύρωση μοντέλου, η εξασφάλιση των ιδιοτήτων κατοικούνται μετά την αποταμιευοποίηση.
- Το `jsonRequiredattribute` είναι ειδικά για την εξασφάλιση ότι υπάρχουν ιδιότητες κατά τη διάρκεια της αποταμιευτικοποίησης JSON.

2. Στάδιο χρήσης:
- `Απαιτείται 'χρησιμοποιείται κατά τη διάρκεια της επικύρωσης του μοντέλου, μετά την αποταμιευοποίηση.
- `jsonRequiredattribute` χρησιμοποιείται κατά τη διάρκεια του ίδιου του json deserialization.

3. Πεδίο εφαρμογής:
- `Απαιτείται 'μπορεί να χρησιμοποιηθεί σε διάφορες μορφές δεδομένων και σενάρια επικύρωσης.
- `jsonRequiredattribute` είναι ειδικά προσαρμοσμένο για το χειρισμό δεδομένων JSON.

4. Συμπεριφορά:
- Εάν λείπει μια ιδιότητα που σημειώνεται με `απαιτείται ', θα έχει ως αποτέλεσμα ένα σφάλμα επικύρωσης μετά την αποταμιευοποίηση.
- Εάν μια ιδιότητα που σημειώνεται με `jsonRequiredattribute` λείπει κατά τη διάρκεια της αποταμιευτικής json, θα ρίξει συνήθως μια εξαίρεση ή θα οδηγήσει σε σφάλμα αποταμιευτικοποίησης.

Συνοπτικά, ενώ και τα δύο χαρακτηριστικά χρησιμοποιούνται για να εξασφαλιστεί η ακεραιότητα των δεδομένων, το `imized` αφορά περισσότερο την επικύρωση του γενικού μοντέλου, ενώ το` jsonRequiredattribute` επικεντρώνεται ειδικά στην εξασφάλιση της παρουσίας των δεδομένων κατά τη διάρκεια των διαδικασιών σειριοποίησης και αποταμίευσης JSON σε εφαρμογές MVVMCross.

Αναφορές:
[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-jsonrequred-in-asp-net-core-model-model-with-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