- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将序列化对象存储为数据库中的 json(或者将来可能是 xml)。在稍后的某个时间点,该对象将被拉取并反序列化。基类是 HighChart,但也有几种派生类型,例如 HighChart.ColumnBarChart。图表的类型存储在 JSON 中。问题是我无法弄清楚我将如何动态选择要反序列化的类。
我的解决方案需要提供一种方法来自动考虑 future 的派生类型(我将扩展图表类型的数量并且不想为每种图表类型编写新的东西)。
我知道我可以将类型存储到一个单独的数据库字段中 - 但我必须再次在我的 Deserialize 方法中为每种类型使用 switch 语句。我还可以解析 json 字符串并发现图表类型,但同样 - 我必须对每种可能的类型使用 switch 语句。
谢谢你的想法!
最佳答案
如果您存储 Assembly Qualified Name数据库中的新类型,您将能够使用它来实例化该类型的实例,而无需更改类型加载代码。实现看起来像这样:
string assemblyQualifiedName = getAssemblyQualifiedNameFromDatabase();
var futureType = Type.GetType(assemblyQualifiedName);
var serializer = new DataContractJsonSerializer(futureType);
var result = (HighChart)serializer.ReadObject(stream);
请注意,没有 case 语句:没有必要提前知道实际类型。但是,此代码假定您已将新类型直接包括在项目中或通过引用。如果要使用尚未使用新类型引用重新编译的程序集动态加载新类型,则必须加载包含新类型的程序集并使用对已加载程序集的引用,以便创建类型引用。
关于c# - 反序列化为未知派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17625296/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!