JSON.NET:如何根据父(持有者)对象的值反序列化接口属性?
JSON.NET:如何根据父(持有者)对象的值反序列化接口属性?
我有这样的类:
class Holder { public int ObjType { get; set; } public ListObjects { get; set; } } abstract class Base { // ... 不重要的内容 } class DerivedType1 : Base { // ... 不重要的内容 } class DerivedType2 : Base { // ... 不重要的内容 }
使用 WebAPI,我想要接收对象 `Holder` 并正确地反序列化它。根据 `ObjType` 的值,我需要将 `Objects` 属性反序列化为 `List
目前,我在 StackOverflow 和互联网上搜索了最佳方法,但我找到的最好的答案是这个回答:https://stackoverflow.com/a/8031283/1038496。这个解决方案的问题是,它丢失了父对象的上下文,所以我无法找出 `ObjType` 的值。好吧,我可以通过为 `Holder` 创建自定义的 `JsonConverter` 并记录 `ObjType` 的值来解决这个问题,但我仍然担心这一行代码:
serializer.Populate(jObject.CreateReader(), target);
因为这个回答下面的评论说:
在 ReadJson 方法中创建的新 JsonReader 没有继承任何原始读取器的配置值(Culture、DateParseHandling、DateTimeZoneHandling、FloatParseHandling 等等)。在使用新的 JsonReader 之前,应该将这些值复制过来。
这对我来说是一个问题,我自己复制这些值似乎不太干净(如果我漏掉了什么怎么办?)
所以问题是:我是否错过了更好的方法来根据父属性值反序列化抽象对象属性?