将 COM 对象序列化为 JSON?
Serialize a COM object to JSON?
我在 C# 代码中设置了对 COM DLL(从 VB6 编译)的引用。
我正在尝试使用 JSON.NET (NewtonSoft) 从该 DLL 中的类型序列化 COM 对象。
到目前为止我尝试过的代码:
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);
}
生成的文件仅包含:
{}
而对于本机 class 此代码将产生全面的序列化。
实际 objectToSerialize
有许多对象属性深达几层。
有什么方法可以让序列化程序正确地处理这种类型的 class?
备注:
DLL 是使用 Visual Studio 2015
自动生成的标准 RCW 互操作 DLL 加载的
作为此类对象的典型代表,运行时 属性 检查器显示对象属性的 "Native View" 和 "Dynamic View"。我怀疑对对象的这种处理类似于 JSON.NET 正在做的事情,如果它只查看 "native" 视图,它可能会错过所有真实属性。另一方面,VS2015 显然可以检查真实对象,因此我希望它可以工作。
谢谢
只要被序列化的对象使用互操作生成的类型 class - 而不是接口,这就可以工作。
在问题的例子中说objectToSerialize
的类型在原始VB6代码中是SomeType
。在 Visual Studio 对象浏览器中,您可以在互操作库中看到几个粗略的等价物:
界面SomeType
界面_SomeType
Class SomeTypeClass
最后一个必须要连载
现在,奇怪的是,即使 SomeType
是一个接口,您也可以创建一个 new
接口并以一种看似正常的方式对该生成的对象进行操作。但同样明显的是,该对象不允许 JSON.net 序列化使用的反射类型。
注意 - ObjectDumper 应该以与这些类型相同的方式运行。所以这一切似乎并不是特定的 JSON.NET 限制。
我在 C# 代码中设置了对 COM DLL(从 VB6 编译)的引用。
我正在尝试使用 JSON.NET (NewtonSoft) 从该 DLL 中的类型序列化 COM 对象。
到目前为止我尝试过的代码:
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);
}
生成的文件仅包含:
{}
而对于本机 class 此代码将产生全面的序列化。
实际 objectToSerialize
有许多对象属性深达几层。
有什么方法可以让序列化程序正确地处理这种类型的 class?
备注:
DLL 是使用 Visual Studio 2015
自动生成的标准 RCW 互操作 DLL 加载的
作为此类对象的典型代表,运行时 属性 检查器显示对象属性的 "Native View" 和 "Dynamic View"。我怀疑对对象的这种处理类似于 JSON.NET 正在做的事情,如果它只查看 "native" 视图,它可能会错过所有真实属性。另一方面,VS2015 显然可以检查真实对象,因此我希望它可以工作。
谢谢
只要被序列化的对象使用互操作生成的类型 class - 而不是接口,这就可以工作。
在问题的例子中说objectToSerialize
的类型在原始VB6代码中是SomeType
。在 Visual Studio 对象浏览器中,您可以在互操作库中看到几个粗略的等价物:
界面
SomeType
界面
_SomeType
Class
SomeTypeClass
最后一个必须要连载
现在,奇怪的是,即使 SomeType
是一个接口,您也可以创建一个 new
接口并以一种看似正常的方式对该生成的对象进行操作。但同样明显的是,该对象不允许 JSON.net 序列化使用的反射类型。
注意 - ObjectDumper 应该以与这些类型相同的方式运行。所以这一切似乎并不是特定的 JSON.NET 限制。