Ho un piccolo problema con il passaggio dell'istanza padre a un costruttore durante la deserializzazione di un oggetto con Newtonsoft.Json
.Come passare il parametro al costruttore deserializing json
Supponiamo Ho le seguenti classi
public class A
{
public string Str1 { get; set; }
public IList<B> Bs { get; set; }
}
public class B
{
public B(A a)
{
// a should not be null!
Console.WriteLine(a.Str)
}
}
e ora ho serailze e che deserializzare l'oggetto a
in questo modo:
A a = new A()
a.Bs = new List<B>()
a.Bs.Add(new B(a));
a.Bs.Add(new B(a));
a.Bs.Add(new B(a));
var json = JsonConvert.SerializeObject(a);
// Here i need to call the constructor of B when creating new instances
var newA = JsonConvert.DeserializeObject<A>(json);
Il problema è che, quando la deserializzazione dell'oggetto, null
farò essere passato al costruttore di B
. Qualcuno ha già risolto questo problema/problema?
Grazie mille!
Se davvero bisogno di questo, si consiglia di modificare la progettazione. Se non puoi serializzare e poi deserializzare e obiettare, non dovresti usarlo in serializzazione. – CodeCaster
Non ricevo alcun messaggio di errore, il valore passato è solo 'null'. Cambiare l'architettura non è realmente possibile, perché ciò causerebbe un sacco di lavoro di refactoring. – BendEg
Voglio dire se la tua classe si basa su un membro interno, non puoi banalmente deserializzare. La serializzazione di default funziona solo sui membri pubblici. Potresti voler rendere pubblico A o renderlo serializzabile in un altro modo. – CodeCaster