将 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?

备注:

谢谢

只要被序列化的对象使用互操作生成的类型 class - 而不是接口,这就可以工作。

在问题的例子中说objectToSerialize的类型在原始VB6代码中是SomeType。在 Visual Studio 对象浏览器中,您可以在互操作库中看到几个粗略的等价物:

  • 界面SomeType

  • 界面_SomeType

  • Class SomeTypeClass

最后一个必须要连载

现在,奇怪的是,即使 SomeType 是一个接口,您也可以创建一个 new 接口并以一种看似正常的方式对该生成的对象进行操作。但同样明显的是,该对象不允许 JSON.net 序列化使用的反射类型。

注意 - ObjectDumper 应该以与这些类型相同的方式运行。所以这一切似乎并不是特定的 JSON.NET 限制。