JSON deserialization of derived types

て烟熏妆下的殇ゞ 提交于 2019-12-06 16:21:23

You have to pass TypeNameHandling = TypeNameHandling.Objects (or All or Auto) when deserializing as well as serializing:

var am =  JsonConvert.DeserializeObject<Class2>(serializedClass1, serializerSettings );

I believe this is for security reasons: it means that an unexpected type cannot be injected during deserialization using default settings. From the docs:

TypeNameHandling should be used with caution when your application deserializes JSON from an external source. Incoming types should be validated with a custom SerializationBinder when deserializing with a value other than TypeNameHandling.None.

For a discussion of the need for this caution see TypeNameHandling caution in Newtonsoft Json.

Sample fiddle.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!