In un'applicazione API Web ASP.NET, alcuni dei modelli con cui sto lavorando contengono una porzione di JSON ad-hoc che è utile solo sul lato client . Sul server entra e esce da un database relazionale come una stringa. Le prestazioni sono fondamentali e sembra inutile elaborare il lato del server delle stringhe JSON.Json.NET - impedire la serializzazione di una proprietà già serializzata
Quindi, in C#, immaginare un oggetto come questo:
new Person
{
FirstName = "John",
LastName = "Smith",
Json = "{ \"Age\": 30 }"
};
Per impostazione predefinita, Json.NET sarà serializzare questo oggetto come questo:
{
"FirstName": "John",
"LastName": "Smith",
"Json": "{ \"Age\": 30 }"
}
mi piacerebbe essere in grado di istruire Json.NET presuppone che la proprietà Json
sia già una rappresentazione serializzata, quindi non dovrebbe ricalibrare e il JSON risultante dovrebbe apparire così:
{
"FirstName": "John",
"LastName": "Smith",
"Json": {
"Age": 30
}
}
Idealmente questo funziona in entrambe le direzioni, vale a dire quando POST la rappresentazione JSON verrà deserializzato automaticamente alla rappresentazione C# sopra.
Qual è il miglior meccanismo per raggiungere questo obiettivo con Json.NET? Ho bisogno di una personalizzazione JsonConverter
? Esiste un meccanismo basato su attributi più semplice? L'efficienza conta; l'intero punto è saltare l'overhead di serializzazione, che potrebbe essere un po 'una micro-ottimizzazione, ma per ragioni di discussione, supponiamo che non lo sia. (Ci saranno potenzialmente essere grandi liste con ingombranti Json
proprietà da restituire.)
Se la proprietà 'Json' è una stringa, deve essere serializzata come stringa. Non sono completamente sicuro di quale sia il problema. Basta serializzarlo come una stringa, memorizzarla nel tuo database come una stringa e deserializzarla come una stringa. –
Forse non l'ho spiegato bene. Ho aggiunto un campione JSON extra per evidenziare la differenza tra ciò che accade di default e ciò che sto cercando di ottenere. –
Se il codice lato server sta ottenendo la stringa JSON da qualche parte che è possibile controllare, sarebbe molto meglio risolvere quella parte del problema piuttosto che cercare di ottenere una risoluzione per questo. Tuttavia, se proviene da qualcosa a cui non si ha accesso, il mio primo tentativo sarebbe di deserializzarlo quando lo si ottiene da qualunque origine lo si recuperi. Questo potrebbe essere fatto con un deserializzatore personalizzato. Non ci sono abbastanza informazioni per trovare la soluzione migliore per te. – krillgar