Posso serializzare proprietà nidificate alla mia class in un’unica operazione con Json.net?

Diciamo che ho un modello come:

public class MyModel { public string Name { get; set; } public string[] Size { get; set; } public string Weight { get; set; } } 

E Json piace così:

 { "name" : "widget", "details" : { "size" : [ "XL","M","S", ] "weight" : "heavy" } } 

Ho cercato di elaborare un modo per serializzare il mio object senza creare un modello per il “nome” e un modello per i “dettagli” in quanto questo non si adatta bene al mio database, quindi richiede un po ‘di giocoleria per ottenere la class popolata.

Posso fare più passaggi su JsonConvert.PopulateObject () come:

 var mod = new MyModel(); JsonConvert.PopulateObject(json.ToString(), mod); JsonConvert.PopulateObject(json["details"].ToString(), mod); 

Ma nel mio codice reale sto eseguendo più thread e PopulateObject non è thread-safe, blocca l’app. I commenti per PopulateJsonAsync () dicono di non usarlo ma invece di usare Task.Run () su PopulateObject ().

Questo non funziona e blocca ancora l’app quando la chiamo come:

 await Task.Run(() => JsonConvert.PopulateObject(response.ToString(), productDetail)); if (response["results"].HasValues) { await Task.Run(() => JsonConvert.PopulateObject(response["results"][0].ToString(), productDetail)); } 

Alcuni riescono a passare ma alla fine l’app viene bloccata completamente. Se rimuovo PopulateObject i thread terminano tutti bene quindi sono abbastanza sicuro che questa funzione non sia thread-safe.

C’è un approccio pulito e sicuro per popolare il mio object in un unico passaggio?