Mam mały problem z przekazywaniem pewnej instancji nadrzędnej do konstruktora podczas deserializacji obiektu przy pomocy Newtonsoft.Json
.Jak przekazać parametr do konstruktora z deserializacją json
Przyjmijmy, mam następujące klasy
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)
}
}
a teraz serailze i niż deserializowania obiekt a
tak:
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);
Problem polega na tym, że podczas deserializacji obiektu, null
będzie przekazać do konstruktora B
. Czy ktoś wcześniej rozwiązał ten problem/problem?
Dziękuję bardzo!
Jeśli naprawdę potrzebują tego, może chcesz zmienić swój wygląd. Jeśli nie możesz serializować, a następnie deserializować i obiektować, nie powinieneś używać go w serializacji. – CodeCaster
Nie dostaję żadnego komunikatu o błędzie, przekazana wartość to po prostu 'null'. Zmiana projektu nie jest możliwa, ponieważ spowodowałoby to wiele prac związanych z refaktoryzacją. – BendEg
Mam na myśli, jeśli twoja klasa polega na wewnętrznym członku, nie możesz trywializować go. Serializacja domyślnie działa tylko dla członków publicznych. Możesz chcieć uczynić A public lub uczynić go serializowalnym w inny sposób. – CodeCaster