ho un tipo che non controllo con più costruttori, equivalente a questa:Impossibile deserializzare classi con più costruttori con Json.NET
public class MyClass
{
private readonly string _property;
private MyClass()
{
Console.WriteLine("We don't want this one to be called.");
}
public MyClass(string property)
{
_property = property;
}
public MyClass(object obj) : this(obj.ToString()) {}
public string Property
{
get { return _property; }
}
}
Ora in cui provo a deserializzare esso, il privato viene chiamato il convertitore parametrico e la proprietà non viene mai impostata. La prova:
[Test]
public void MyClassSerializes()
{
MyClass expected = new MyClass("test");
string output = JsonConvert.SerializeObject(expected);
MyClass actual = JsonConvert.DeserializeObject<MyClass>(output);
Assert.AreEqual(expected.Property, actual.Property);
}
dà il seguente risultato:
We don't want this one to be called.
Expected: "test"
But was: null
Come posso risolvere il problema, senza cambiare la definizione di MyClass
? Inoltre, questo tipo è una chiave in profondità nella definizione degli oggetti che ho davvero bisogno di serializzare.
Grazie, purtroppo, come ho scritto nella domanda, non posso cambiare la classe. – Grzenio
Quindi penso che sia necessario creare un CustomJsonConverter. Questo non è qualcosa che ho fatto, ho paura. –
Prova a cercare qui: http://stackoverflow.com/a/8312048/234415 –