JSON.NET:如何根据父(持有者)对象的值反序列化接口属性?

18 浏览
0 Comments

JSON.NET:如何根据父(持有者)对象的值反序列化接口属性?

我有这样的类:

class Holder {
    public int ObjType { get; set; }
    public List Objects { get; set; }
}
abstract class Base {
    // ... 不重要的内容
}
class DerivedType1 : Base {
    // ... 不重要的内容
}
class DerivedType2 : Base {
    // ... 不重要的内容
}

使用 WebAPI,我想要接收对象 `Holder` 并正确地反序列化它。根据 `ObjType` 的值,我需要将 `Objects` 属性反序列化为 `List`(当 `ObjType == 1`)或者 `List`(当 `ObjType == 2`)。

目前,我在 StackOverflow 和互联网上搜索了最佳方法,但我找到的最好的答案是这个回答:https://stackoverflow.com/a/8031283/1038496。这个解决方案的问题是,它丢失了父对象的上下文,所以我无法找出 `ObjType` 的值。好吧,我可以通过为 `Holder` 创建自定义的 `JsonConverter` 并记录 `ObjType` 的值来解决这个问题,但我仍然担心这一行代码:

serializer.Populate(jObject.CreateReader(), target);

因为这个回答下面的评论说:

在 ReadJson 方法中创建的新 JsonReader 没有继承任何原始读取器的配置值(Culture、DateParseHandling、DateTimeZoneHandling、FloatParseHandling 等等)。在使用新的 JsonReader 之前,应该将这些值复制过来。

这对我来说是一个问题,我自己复制这些值似乎不太干净(如果我漏掉了什么怎么办?)

所以问题是:我是否错过了更好的方法来根据父属性值反序列化抽象对象属性?

0