Richiamare la tecnologia: C#
, Newtonsoft.Json
.
Abbiamo una classe che contiene una proprietà denominata SchemaVersion
che usiamo per informare della versione del documento Json una volta che l'oggetto è in definitiva serializzato nel nostro CosmosDb.
Attualmente questa proprietà è impostata nel costruttore della classe dell'oggetto, e per semplicità supponiamo che sia "1.0"
Finora abbiamo aggiunto solo alla nostra classe & incrementato "1.0"
in "2.0"
, quindi quando deserializziamo il documento non dell'ultima SchemaVersion
vogliamo sempre "aggiornarlo" e questo viene fatto semplicemente controllando il valore di quella proprietà ..
private string _schemaVersion;
public string SchemaVersion
{
get => _schemaVersion != "2.0" ? "2.0" : _schemaVersion;
set => _schemaVersion = value;
}
I nuovi oggetti hanno ancora il loro SchemaVersion
impostato con il costruttore di oggetti. Questo mi sembra un po 'goffo .. ma fa il lavoro.
Tuttavia, so che arriverà un punto in cui dobbiamo rifattorizzare la classe per qualche motivo ancora sconosciuto. Cercheremo di evitarlo il più possibile .. ma posso vederlo accadere.
La sfida diventa allora come manteniamo le conversioni tra
-
"1.0"
- > %codice% -
"x.0"
- > %codice% -
"2.0"
- > %codice% -
"x.0"
- > %codice%
Esistono modi consigliati in cui è meglio gestirlo? L'idea migliore che ho adesso è un JsonConverter personalizzato, che ho scritto prima per deserializzare documenti Json sconosciuti su un oggetto specifico basato su una proprietà all'interno di quel documento ... ma mi chiedo se sia troppo complicato come faremo < em> sempre fai la deserializzazione in una forma più recente ...
Temo che questo potrebbe diventare complesso rapidamente se ci ritroviamo con molte versioni e tutte le conversioni alla versione più recente devono essere mantenute separatamente ..