c# – JSON.NET:反序列化一个类包含从接口派生的对象列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – JSON.NET:反序列化一个类包含从接口派生的对象列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1528字,纯文字阅读大概需要3分钟。
内容图文
![c# – JSON.NET:反序列化一个类包含从接口派生的对象列表](/upload/InfoBanner/zyjiaocheng/785/0da4a307369f4b77b172ef50eaaae302.jpg)
我有麻烦反序列化我的对象.它包含以下属性:
public List<IShape> Shapes { get; set; };
和JSON.NET反序列化器总是告诉我,实例化一个接口是不可能的.
我有几个类实现了实现IShape接口的接口,例如折线 – > IPolyline – > IShape的.我已经尝试了两种解决方案
> https://stackoverflow.com/a/8031283/1525505
> https://stackoverflow.com/a/12769061/1525505
但我得到了同样的例外,即IShape无法立即被抛出.
我使用TypeNameHandling.Auto,TypeNameHandling序列化对象.即使我使用上面链接的帖子中提到的转换器,也没有帮助.
有谁知道这个问题的解决方案?如果需要一些代码,我很乐意发布它.
以下是生成的JSON示例.
"$type": "SketchModel.Layer, SketchModel",
"Id": 57865477,
"Shapes": {
"$type": "System.Collections.Generic.List`1[[SketchModel.Shapes.AbstractShapes.IShape, SketchModel]], mscorlib",
"$values": [
{
"$type": "SketchModel.Shapes.Polyline, SketchModel",
这一行是造成这个问题的原因:
"System.Collections.Generic.List`1[[SketchModel.Shapes.AbstractShapes.IShape, SketchModel]], mscorlib"
它根本不知道如何实例化IShape.如果我创建一个自定义转换器并让它返回每个IShape的折线,它可以工作,但不会创建任何其他形状(例如椭圆).
在里面
公共覆盖对象ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer)方法在自定义转换器中被覆盖,如果我让我打印objectType的完整类型名称它总是IShape,从来没有其他任何东西……
解决方法:
异常是有道理的,因为反序列化器不知道界面在保湿时应该表示的具体类型.
在序列化期间,JSON.NET允许您将其配置为添加一些要在这种情况下使用的元数据. This SO question有一个解释如何配置它的答案.
该配置将向JSON添加一个类型属性,该属性将在反序列化期间使用.
内容总结
以上是互联网集市为您收集整理的c# – JSON.NET:反序列化一个类包含从接口派生的对象列表全部内容,希望文章能够帮你解决c# – JSON.NET:反序列化一个类包含从接口派生的对象列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。