Десериализатор json не может установить тип десериализации до Props
. Когда вы сериализуете, он знает тип, поэтому он сериализуется, как и ожидалось.
Если вы сделаете NodeModel
generic:
public class NodeModel<T>
{
(...)
public T Props { get; set; }
}
, вы можете помочь десриализатору, сообщив ему, какой тип использовать.
serialiser.DeserialiseObject<NodeModel<SomeType>>(json);
Невозможность задания с object
Давайте представим, что десериализатор обладает способностью сканировать все возможные классы. Даже тогда он не сможет принять правильное решение во многих случаях.
Рассмотрим следующий сценарий.
public class A
{
public string Name { get; set; }
public string Color { get; set; }
}
public class B
{
public string Name { get; set; }
public string Color { get; set; }
public string X { get; set; }
}
public class NodeModel
{
public object Props { get; set; }
}
public static void Main(string[] args)
{
var o = new NodeModel { Props = new B() { Name = "I'm B", Color = "Blue", X = null}};
var json = serialiser.Serialise(o);
// Json would be something like
// {
// "Props": {
// "Name": "I\u0027m B",
// "Color": "Blue",
// }
// }
//(...)
var o2 = serialiser.Deserialise(o);
// How can the serialiser decide what to deserialise Props to?
// Is it A or is it B?
}