0
我想在確定從CustomCreationConverter返回的正確類型時訪問當前目標對象的其他反序列化屬性值。如何訪問CustomCreationConverter.Create()中的反序列化上下文?
I.e.在下面的BeeConverter.Create()方法中,我想訪問GetCurrentTarget()這樣的東西,它會讓我回到(部分填充的)當前對象實例。是否可能有某個事件或回調讓我可以存儲ref到當前目標?
在此先感謝。
public class B
{
public int IntProp;
}
public class D1 : B
{
public string StringProp;
}
public class D2 : B
{
public decimal DecimalProp;
}
public class Thingy
{
public int Selector;
public B DerivedProp;
}
public class BeeConverter : CustomCreationConverter<B>
{
public override B Create(Type objectType)
{
var theThingy = GetCurrentTarget();
if (theThingy == null) return null;
return theThingy.Selector == 1 ? new D1() as B : new D2();
}
private Thingy GetCurrentTarget()
{
// ????
}
}
public class ConverterTests : TestFixtureBase
{
[Test]
public void CanDeserializeDerivedType()
{
var testObject = new Thingy { Selector = 1, DerivedProp = new D1 { StringProp = "42" } };
string stream = JsonConvert.SerializeObject(testObject);
var result = JsonConvert.DeserializeObject<Thingy>(stream, new BeeConverter());
Assert.IsInstanceOfType(typeof(D1), result.DerivedProp);
Assert.AreEqual("42", (result.DerivedProp as D1).StringProp);
}
}