Json.net сериализует/десериализует производные типы?

json.net(newtonsoft)
Я просматриваю документацию, но я не могу найти что-либо на этом или наилучшем способе сделать это.

public class Base
{
    public string Name;
}
public class Derived : Base
{
    public string Something;
}

JsonConvert.Deserialize<List<Base>>(text);

Теперь у меня есть производные объекты в сериализованном списке. Как выполнить десериализацию списка и вернуть производные типы?

Ответ 2

Вам нужно включить обработку имен типов и передать это в сериализатор (de) в качестве параметра параметров.

Base object1 = new Base() { name = "Object1" };
Derived object2 = new Derived() { something = "Some other thing" };
List<Base> inheritanceList = new List<Base>() { object1, object2 };

JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
string Serialized = JsonConvert.SerializeObject(inheritanceList, settings);
List<Base> deserializedList = JsonConvert.DeserializeObject<List<Base>>(Serialized, settings);

Это приведет к правильной десириализации производных классов. Недостатком этого является то, что он назовет все объекты, которые вы используете, поэтому он назовет список, в который вы помещаете объекты.