我需要使用.net或Delphi .Net使用.net序列化一个Com对象 这有可能吗?
答案 0 :(得分:5)
检查COM对象是否实现IPersistStream,IPersistMemory或任何其他IPersist变体 - 这是您最好的选择。
答案 1 :(得分:1)
您可以通过将COM对象包装在(可序列化的).NET类中,然后公开要序列化的字段来实现此目的。
答案 2 :(得分:1)
您可以获得托管Object
到GetObjectForIUnknown方法。然后,您可以序列化此托管对象。
答案 3 :(得分:0)
不仅仅是通过将对象传递给序列化程序 - 在COM对象包装器上实现ISerializable接口(主interop程序集也是一个包装器)并定义自己的序列化。
答案 4 :(得分:0)
我已经能够通过标准的运行时可调用包装COM互操作序列化导入C#的COM对象。
只要要序列化的对象使用由互操作生成的类的类型-而不是接口,此方法就应该起作用。
说您要在原始/本机代码中序列化为SomeType
的对象的类型。在Visual Studio对象浏览器中,您应该在互操作库中看到几个粗略的等效项:
接口SomeType
接口_SomeType
类SomeTypeClass
这是最后一个必须用于序列化的。
(至少这是基于VB6的类的显示方式)。
要使其正常工作,请在C#代码中设置对COM DLL的引用。 Visual Studio应该自动生成一个互操作DLL。 (生成互操作DLL的过程涉及检查COM DLL的typelib元数据,并使用它来生成托管类。因此,基于反射的序列化工作所需的所有信息都应该可用。)
然后,提供一些示例代码:
var settings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
};
var serializer = JsonSerializer.Create(settings);
using (var gz = new GZipStream(File.OpenWrite(filespec), CompressionMode.Compress))
using (var sw = new StreamWriter(gz))
using (var writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, objectToSerialize);
}
这应该将objectToSerialize
的JSON序列化版本写到GZIP压缩文件中。
答案 5 :(得分:-2)
我不确定您在C ++,。Net或任何其他语言中序列化数据的方式会有所不同。 COM对象就像一个类,可以通过获取每个数据成员并将其序列化来序列化。我在C ++中确实喜欢这样。
我认为在.Net中应该是相同的,除非有特定的API来执行它。