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);
}
}