Я хотел бы получить доступ к другим значениям десериализованного свойства текущего целевого объекта при определении правильного типа для возврата из CustomCreationConverter.Как я могу получить доступ к контексту десериализации в CustomCreationConverter.Create()?
I.e. в методе BeeConverter.Create() ниже я хочу получить доступ к чему-то вроде GetCurrentTarget(), который вернет мне (частично заполненный) текущий экземпляр объекта. Возможно, есть какое-то событие или обратный вызов, который позволяет мне хранить ссылку на текущую цель?
Заранее спасибо.
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);
}
}