Deserializza in oggetti figlio corretti

Sto cercando di deserializzare un mix di un genitore e di diversi child in un List . Sfortunatamente tutti i campi extra di mio figlio vengono scartati e vengono serializzati come genitore.

Ho cercato di capire come denominare gli oggetti nel loro insieme per collegarli alla class figlio corretta. Non ho avuto alcun risultato con questo.

Queste sono una semplice class genitore e figlio, provo a serializzare oggetti da:

 [JsonObject(MemberSerialization.OptIn)] class Product { [JsonProperty] public string Name { get; set; } [JsonProperty] public int Amount { get; set; } [JsonProperty] public int Value { get; set; } } [JsonObject(MemberSerialization.OptIn)] class ProductType : Product { [JsonProperty(Order = 4)] public int Volume { get; set; } } 

La serializzazione non è un problema, il volume viene aggiunto come campo finale per l’object “prodotto speciale”. L’objective è avere più bambini. Sotto il codice che serializza 2 oggetti creati in una lista. Non riesce a deserializzare in quanto inserisce entrambi gli oggetti come un normale prodotto nell’elenco:

 Product test1 = new Product { Name = "Simple Product", Amount = 110, Value = 10 }; ProductType test2 = new ProductType { Name= "Special Type", Amount = 230, Value = 22, Volume = 6 }; List ProductList = new List() { test1, test2 }; string output = JsonConvert.SerializeObject(ProductList, Formatting.Indented); //Works correctly. List DeSerialized = JsonConvert.DeserializeObject<List>(output); //Fails creating child object. 

Ho dovuto abilitare la gestione dei nomi e passare questo al serializzatore e al deserializzatore come parametro delle impostazioni. Sono rimasto bloccato su questo perché stavo cercando di fare qualcosa di simile sulle mie lezioni.

 JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string output = JsonConvert.SerializeObject(ProductList, Formatting.Indented, settings); List deserializedList = JsonConvert.DeserializeObject>(output, settings); 

Ancora ci dovrebbe essere un’opzione per serializzare solo le classi che vuoi come per l’esempio di cui sopra non ho bisogno di serializzare e memorizzare la class base / genitore come ho già dato quel tipo quando (de) serializzazione. Inoltre non ho bisogno di serializzare l’object List, questo in particolare dà un inutile disordine. Quindi, anche se questa è una soluzione al mio problema, sto cercando un modo migliore per farlo, il seguente è che non dà errori ma non sembra fare nulla neanche:

 [JsonObject(ItemTypeNameHandling = TypeNameHandling.Objects/all/auto/...)] class ...