I Klassen mit mehreren Konstrukteuren deserialisieren haben einen Typ, der ich mit mehreren Konstrukteuren nicht, das entspricht diese Kontrolle:kann nicht mit 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; }
}
}
Jetzt, wenn ich versuche, es zu deserialisieren, die private Der parameterlose Konstruktor wird aufgerufen, und die Eigenschaft wird niemals festgelegt. Der Test:
[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);
}
gibt die folgende Ausgabe:
We don't want this one to be called.
Expected: "test"
But was: null
Wie kann ich das Problem beheben, ohne die Definition von MyClass
zu ändern? Außerdem ist dieser Typ ein Schlüssel in der Definition der Objekte, die ich wirklich serialisieren muss.
Danke, leider, wie ich in der Frage schrieb, kann ich nicht die Klasse ändern. – Grzenio
Dann denke ich, dass Sie einen CustomJsonConverter erstellen müssen. Das ist nicht etwas, was ich getan habe, fürchte ich. –
Versuchen Sie, hier zu suchen: http://StackOverflow.com/a/8312048/234415 –