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