Ответ 1
Если вы сохраняете тип в text
(как и должно быть в этом сценарии), вы можете использовать JsonSerializerSettings
.
Смотрите: как десериализовать JSON в IEnumerable <BaseType> с Newtonsoft JSON.NET
json.net(newtonsoft)
Я просматриваю документацию, но я не могу найти что-либо на этом или наилучшем способе сделать это.
public class Base
{
public string Name;
}
public class Derived : Base
{
public string Something;
}
JsonConvert.Deserialize<List<Base>>(text);
Теперь у меня есть производные объекты в сериализованном списке. Как выполнить десериализацию списка и вернуть производные типы?
Если вы сохраняете тип в text
(как и должно быть в этом сценарии), вы можете использовать JsonSerializerSettings
.
Смотрите: как десериализовать JSON в IEnumerable <BaseType> с Newtonsoft JSON.NET
Вам нужно включить обработку имен типов и передать это в сериализатор (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);
Это приведет к правильной десириализации производных классов. Недостатком этого является то, что он назовет все объекты, которые вы используете, поэтому он назовет список, в который вы помещаете объекты.