Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Каковы различия между использованием требуемого атрибута и jsonrequiredattribute в mvvmcross


Каковы различия между использованием требуемого атрибута и jsonrequiredattribute в mvvmcross


В MVVMcross при работе с проверкой данных и сериализацией два атрибута часто вступают в игру: «Требуется» и `jsonrequiredattribute`. Эти атрибуты служат разным целям и используются на разных этапах жизненного цикла приложения.

Требуемый атрибут

Атрибут `rekecle` является частью пространства имен `system.componentmodel.dataannotations` и используется для проверки модели. Это указывает на то, что свойство должно иметь значение; В противном случае модель считается недействительной. Этот атрибут обычно используется после десериализации, на этапе проверки модели. Например, в ядре ASP.NET, если свойство украшено `[обязательно]`, `modelState 'будет недействительным, если это свойство отсутствует или нулевым во время привязки модели.

В MVVMcross, в то время как атрибут «требуется» для проверки, он не взаимодействует напрямую с процессами сериализации JSON или десериализации. Вместо этого речь идет больше о том, чтобы определенные свойства были заполнены, прежде чем продолжить бизнес -логику.

jsonrequiredattribute

`Jsonrequiredattribute` специфичен для сериализации и десериализации JSON. Он используется, чтобы указать, что свойство должно присутствовать в данных JSON во время десериализации. Этот атрибут имеет решающее значение при работе с данными JSON, поскольку он гарантирует, что всегда присутствуют необходимые свойства, предотвращая потенциальные ошибки из -за отсутствующих данных.

В MVVMcross при использовании JSON для навигации или передачи данных между моделями просмотра `jsonrequiredattribute` гарантирует, что необходимые свойства сериализованы и правильно опустошены. Это особенно важно, потому что MVVMcross в значительной степени зависит от JSON для сложного параметра во время навигации.

Ключевые различия

1. Цель:
- «Требуется» предназначена для общей проверки модели, обеспечивая заполненные свойства после десериализации.
- `jsonrequiredattribute` специально для обеспечения присутствия свойств во время пустынной пустыни JSON.

2. Стадия использования:
- «Требуется» используется во время проверки модели, после десериализации.
- `jsonrequiredattribute` используется во время самой десериализации JSON.

3. Область:
- «Требуется» может использоваться в различных форматах данных и сценариях проверки.
- `jsonrequiredattribute` специально адаптирован для обработки данных JSON.

4. Поведение:
- Если свойство, помеченное «обязательным», отсутствует, оно приведет к ошибке проверки после десериализации.
- Если свойство, помеченное «jsonrequiredattribute», отсутствует во время десериализации JSON, оно обычно вызывает исключение или приводит к ошибке десериализации.

Таким образом, в то время как оба атрибута используются для обеспечения целостности данных, «Требуется» в большей степени связано с общей проверкой модели, тогда как «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-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