如何用 Newtonsoft.Json 正确解析属性为“接口集合<接口>”的JSON字符串

问题描述

如何用Newtonsoft.Json正确解析属性为“接口集合<接口>”的字符串我想要能够正确解析CC类,也就是其属性是IList<I>,都是接口类型的。请注意,DD类中可能还继续包含更深层次的集合接口。比如DD还包含D3是IList<IDD4>.//CCocc=JsonConvert.DeserializeObject<CC>(s);//提示错误:Errorsettingvalueto'C3'on'ConsoleApplication1.CC'.usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingNewtonsoft.Json;usingNewtonsoft.Json.Serialization;usingNewtonsoft.Json.Converters;usingSystem.Diagnostics;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){strings="{"B":"sdfasdf","C3":[{"a":"sdfasdf"},{"a":"adsfasdf33333333"}]}";//提问,如何用Newtonsoft.Json正确解析属性为“接口集合<接口>”的字符串//我想要能够正确解析CC类,也就是其属性是IList<I>,都是接口类型的。//请注意,DD类中可能还继续包含更深层次的集合接口。比如DD还包含D3是IList<IDD4>.//CCocc=JsonConvert.DeserializeObject<CC>(s);//提示错误:Errorsettingvalueto'C3'on'ConsoleApplication1.CC'.CC2occ2=JsonConvert.DeserializeObject<CC2>(s);//能够正确解析Debug.Print(((DD)occ2.C3[0]).a);//CC3occ3=JsonConvert.DeserializeObject<CC3>(s);//提示错误:Errorsettingvalueto'C3'on'ConsoleApplication1.CC'.//Debug.Print(((DD)occ3.C3[0]).a);}}///<summary>///请注意CCCC2CC3只是在C3的定义上有区别。CC是我要最终实现的类。///</summary>publicclassCC2{publicstringB;[JsonConverter(typeof(ConcreteTypeConverter<List<DD>>))]publicIList<DD>C3;}publicclassCC3{publicstringB;[JsonConverter(typeof(ConcreteTypeConverter<List<DD>>))]publicList<IDD>C3;}publicclassCC{publicstringB;[JsonConverter(typeof(ConcreteTypeConverter<List<DD>>))]publicIList<IDD>C3;}publicinterfaceIDD{stringa{get;set;}}publicclassDD:IDD{publicstringa{get;set;}}publicclassConcreteTypeConverter<T>:JsonConverter{publicoverrideboolCanConvert(TypeobjectType){//assumewecanconverttoanythingfornowreturntrue;}publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializerserializer){//explicitlyspecifytheconcretetypewewanttocreatereturnserializer.Deserialize<T>(reader);//实现不了}publicoverridevoidWriteJson(JsonWriterwriter,objectvalue,JsonSerializerserializer){//usethedefaultserialization-itworksfineserializer.Serialize(writer,value);}}}

解决方案

解决方案二:
高端大气上档次,低调奢华有内涵
解决方案三:

解决方案四:
已知:interfaceIPet{stringname;}classCat:IPet{publicstringname{get;set;}}classDog:IPet{publicstringname{get;set;}}

现有Json:{name:"Kitty"}被IPet来反序列化,你能确定它是Cat还是Dog吗?
解决方案五:
不要用问题来回答问题。只要属性符合,完全没问题,而且我也手动给出了反序列化的类型。两个类,属性一样,方法一样,所有对外公开的接口都一样,就封装性来说他就是同一个类,至少是可以随意替换的一类。所以我只要完成这个就可以了。
解决方案六:
List<DD>跟List<IDD>毫无关系,没有继承关系。你应该先学号泛型,再重新设计你的程序意图。
解决方案七:
你应该先看设计意图,设计的目的就是可以随意替换c3,当然不能有继承关系
解决方案八:
不要扯其他的了,还是专注于问题吧
解决方案九:

解决方案十:
版主,这个问题你还解决了?

时间: 2024-11-16 02:09:51

如何用 Newtonsoft.Json 正确解析属性为“接口集合&amp;lt;接口&amp;gt;”的JSON字符串的相关文章

jquery动态遍历Json对象的属性和值的方法_javascript技巧

1.遍历 json 对象的属性 //定义json对象 var person= { name: 'zhangsan', pass: '123', fn: function(){ alert(this.name+"的密码="+this.pass); } } //遍历person属性包括方法,如果不想显示出方法,可用typeof(person[item])== "function"来判断 for(var item in person){ alert("perso

10分钟掌握XML、JSON及其解析_基础知识

引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个人穷其一生也未必能掌握其一角.不过个人一直认为基本的技术和思想是放之四海而皆准的,许多技术未必需要我们从头到尾再研究一遍,我们要做的就是站在巨人的肩膀上,利用其成果来为人们的需求服务. 随着移动互联网时代的大潮,越来越多的App不光是需要和网络服务器进行数据传输和交互,也需要和其他 App 进行数据传递.承担

Android随手笔记44之JSON数据解析_Android

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android开发中,如何在服务器端创建JSON数据,以及如何在Android客户端对JSON数据进行解析. 1.JSON数据结构 在JSON中有两种数据结构:对象和数组. 1.1对象 在JSON中,一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"

Swift学习笔记(2)网络数据交换格式(XML,JSON)解析 [iOS实战 入门与提高卷]

Swift学习笔记(2)网络数据交换格式(XML,JSON)解析 参考书籍及资源:iOS实战 入门与提高卷 关东升 参考书籍地址 用NSXML来解析XML文档 用TBXML来解析XML文档 用NSJSONSerialization来解析JSON文档 目录 Swift学习笔记2网络数据交换格式XMLJSON解析 目录 用NSXML来解析XML文档 示例文档Notesxml 创建XMLParser类 调用与运行结果 用TBXML来解析XML文档 准备工作 创建XMLParser类 调用与运行结果 用

json格式解析和libjson的用法介绍(关于cjson的使用方法)_C 语言

在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据格式:JSON与XML.本文主要介绍JSON格式的简单概念及JSON在Rss Reader中的应用,XML格式的使用将在下一篇文章做介绍. JSON简介: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,可以把JSON的结构理解成无序的.可嵌套的key-value键值对集合,这些key-value键值对是

js解析与序列化json数据(三)json的解析探讨_json

这一节我们主要讨论json的解析. JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将早每个键值对上调用.为了区别JSON.stringify()接收的替换(过滤)函数(replacer),这个函数被称作还原函数(reviver),但实际上这两个函数的签名是相同的--它们都接收连个参数,一个键和一个值,而且都需要返回一个值. 如果还原函数返回undefined,则表示要从结果中删除相应的键:如果返回其他值,则将该值插入到结果中.如: 复制代码 代码如下: <html> &l

Android随手笔记44之JSON数据解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android开发中,如何在服务器端创建JSON数据,以及如何在Android客户端对JSON数据进行解析. 1.JSON数据结构 在JSON中有两种数据结构:对象和数组. 1.1对象 在JSON中,一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"

Android 中对JSON数据解析实例代码

Android 中对JSON数据解析 在Android的网络编程中,JSON是比XML使用更为广泛的数据传输机制.在许多的http网络请求或接口调用中,返回的很多都是JSON.所以学会解析JSON是学会Android的基本技能. 简单介绍下JSON,JSON是轻量级的文本数据交换格式,独立于语言和平台.比XML更小,更快,更易解析.JSON是用键值对来保存数据的.JSON保存的值可以是数字.字符串.布尔值.数组和对象. 废话少说,直接上代码.下面对以下JOSN进行解析: { "language&

java 如何用netcdfAll-4.6.jar 解析雷达基数据?

问题描述 java 如何用netcdfAll-4.6.jar 解析雷达基数据? 如何用netcdfAll-4.6.jar将雷达基数据的SA/SB/CC/CD格式的数据进行读取 ,生成雷达图片?? 求大神告知!!! 解决方案 [Java工程师之路][1-4.6]Java国际化