- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有以下无法解决的问题:
我有不同的类,它们都实现了一个名为 IProtocol
的接口(interface)。目前,它们被命名为 SimpleProtocol
、ParallelProtocol
。我想保留那些对象,所以我使用了 JSON.NET,一切正常。除了当我试图反序列化它们时,当我知道它们应该是什么类型时它会完美地工作,例如:
SimpleProtocol p = JsonConvert.DeserializeObject<SimpleProtocol>(myJsonData);
但是,我现在处于一种情况,我想加载 JSON 数据并获取 IProtocol
返回,但可以理解,这是 JSON 不允许的;例如,这样的事情不有效:
IProtocol p1 = JsonConvert.DeserializeObject<IProtocol>(myJsonData); // does not work
IProtocol p2 = (IProtocol)JsonConvert.DeserializeObject(myJsonData); // also, does not work
因此,查找 API我找到了这个方法签名:
public static Object DeserializeObject(
string value,
Type type
)
这看起来就像我需要的东西,所以通过在字符串中保留类型并检索它来尝试:
// test
Type protocolType = Type.GetType("MyApp.Protocols.SimpleProtocol");
IProtocol p1 = JsonConvert.DeserializeObject(myJsonData, protocolType);
我收到一个错误,提示无法将 Newtonsoft.Json.Linq.JObject
转换为 IProtocol
。这很奇怪,我不知道如何解决。
不可能在泛型方法中传递Type对象,所以我基本就卡在这里了。有没有办法解决这个问题,最好不使用反射?在我看来,这是一个完全正常的用例。
我能做的,但对我来说似乎有点“脏”,是创建一个简单的包装类,其中包含一个 IProtocol 实例并序列化/反序列化它?
最佳答案
看来我最初使用这种方法的做法毕竟是正确的:
public static Object DeserializeObject(
string value,
Type type
)
问题是我使用 MyProtocol.GetType().FullName
坚持我的对象类型,这导致了一个值来自
Type protocolType = Type.GetType(PersistedTypeString);
成为具有 null
值的类型。然而,通过使用 MyProtocol.GetType().AssemblyQualifiedName
一切正常(p.s. 这也包含在 Type.GetType() 的文档中)
这是我的代码示例:
Type ProtocolType = Type.GetType(MetaData["ProtocolType"]);
var Protocol = JsonConvert.DeserializeObject(Data["Protocol"],
ProtocolType,
JsonProtocolPersister.DefaultSettings);
return (IProtocol)Protocol;
关于c# - JSON.NET 反序列化为带有 Type 参数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178323/
出于好奇,我尝试了一些原型(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,
我是一名优秀的程序员,十分优秀!