No MVVMcross, ao lidar com a validação e serialização de dados, dois atributos geralmente entram em jogo: `requerir` e` jsonRequiredAttribute`. Esses atributos servem a propósitos diferentes e são usados em diferentes estágios do ciclo de vida do aplicativo.
Atributo necessário
O atributo `requerir` faz parte do espaço de nome` System.componentModel.Dataannotações` e é usado para validação do modelo. Indica que uma propriedade deve ter um valor; Caso contrário, o modelo é considerado inválido. Esse atributo é normalmente usado após a desserialização, durante a fase de validação do modelo. Por exemplo, no núcleo do ASP.NET, se uma propriedade for decorada com `[obrigatória]`, o `ModelState` será inválido se essa propriedade estiver ausente ou nula durante a ligação do modelo.
No MVVMCROSS, enquanto o atributo `requerir` pode ser usado para validação, ele não interage diretamente com os processos de serialização ou desserialização JSON. Em vez disso, trata -se de garantir que certas propriedades sejam preenchidas antes de prosseguir com a lógica de negócios.
jsonRequiredAttribute
O `jsonRequiredAttribute` é específico para a serialização e deserialização do JSON. É usado para indicar que uma propriedade deve estar presente nos dados JSON durante a deserivalização. Esse atributo é crucial ao trabalhar com dados JSON, pois garante que as propriedades necessárias estejam sempre presentes, impedindo possíveis erros devido à falta de dados.
No MVVMcross, ao usar o JSON para navegação ou transferência de dados entre os modelos de exibição, `jsonRequiredAttribute` garante que as propriedades necessárias sejam serializadas e desserializadas corretamente. Isso é particularmente importante porque o MVVMcross depende muito do JSON para a passagem de parâmetros complexos durante a navegação.
Diferenças -chave
1. Objetivo:
- `requerido` é para validação geral do modelo, garantindo que as propriedades sejam preenchidas após a desserialização.
- `jsonRequiredAttribute` é especificamente para garantir que as propriedades estejam presentes durante a desserialização do JSON.
2. Estágio de uso:
- `requerido` é usado durante a validação do modelo, após a deserialização.
- `jsonRequiredAttribute` é usado durante a própria desserialização do JSON.
3. Escopo:
- `requerir` pode ser usado em vários formatos de dados e cenários de validação.
- `jsonRequiredAttribute` é especificamente adaptado para o manuseio de dados JSON.
4. Comportamento:
- Se uma propriedade marcada com `obrigatória` estiver faltando, resultará em um erro de validação após a desserialização.
- Se uma propriedade marcada com `jsonRequiredAttribute` estiver ausente durante a desserialização do JSON, ela normalmente lançará uma exceção ou resultará em um erro de desseialização.
Em resumo, enquanto ambos os atributos são usados para garantir a integridade dos dados, `` Requerido '' é mais sobre validação geral de modelos, enquanto `jsonRequiredAttribute` está especificamente focado em garantir a presença de dados durante os processos de serialização e deseralização do JSON em aplicações de MVVMCross.
Citações:[1] https://github.com/mvvmcross/nplus1daysafmvvmcross/blob/master/n-39-crosslight-touch/crosslighttouch/properties/annotações.cs
[2] https://www.mvvmcross.com/documentation/plugins/json
[3] https://stackoverflow.com/questions/49237767/using-required-and-jsonrechired-in-asp-core-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-bindrequised-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