【发布时间】:2014-10-10 16:01:25
【问题描述】:
我一直在开发一个 Windows 窗体控件项目,以使用他们提供的 SDK 导入到第三方客户端软件。我尝试加载的另一家公司编写的自定义控件需要在显示信息之前登录到服务器,这可能需要 20-30 秒。为了加快速度,我想到了将控件所需的信息预加载到文本文件中。由于它不是已知类型,因此在尝试序列化类时会引发错误。
我有一个字典用来引用正确的 ICamera 类。如果我将“cam”从 ICamera 类型更改为字符串,例如“cam.GetLiveURL()”。它毫无问题地写入文本文件。这是我用来填充字典的代码。
foreach (ICamera cam in _adapter.Cameras())
{
OCCamera.Add(cam.GetDisplayName(), cam);
}
我尝试过 XMLSerializer,但它似乎很难处理字典。
我试过 BinaryFormatter 并得到错误:
在未标记为可序列化的程序集“OCAdapter.dll”中键入“OCAdapter.OCCamera”。
我试过 DataContractSerializer 并得到错误:
使用数据合同名称键入“OCAdapter.OCCamera” 'OCCamera:http://schemas.datacontract.org/2004/07/OCAdapter' 不是 预期的。考虑使用 DataContractResolver 或添加蚂蚁类型 静态已知的已知类型列表 - 例如,通过使用 KnownTypeAttribute 属性或通过添加到已知列表中 传递给 DataContractSerializer 的类型。
我尝试过使用 DataContractResolver,但似乎无法让它工作,我完全不明白。
我用于 BinaryFormatter 和 DataContractSerializer 的代码直接来自 MSDN 或其他地方,并且在没有自定义类型的情况下可以正常测试。
也许有更好的方法来处理这一切,我想念它。我不反对放弃 Dictionary 路线以换取其他东西,或者我可以重写任何数量的其他代码来完成这项工作。
【问题讨论】:
-
“登录到服务器”是一个相当模糊的陈述。这是 REST HTTP 服务吗?你能给我们一个来自这个“服务器”的响应示例吗?
-
这是一个网络录像机,NVR。它记录来自安全摄像头的流。很抱歉,我不知道如何更好地回答这个问题。
标签: c# .net dictionary datacontractserializer binaryformatter