使用 CodeDomSerializer 进行序列化 - 如何初始化管理器对象



网络上有许多示例展示了如何使用CodeDomSerializer。它们中的大多数都演示如何重写该类的序列化和反序列化方法。问题是此序列化方法采用 IDesignerSerializationManager 类型的管理器参数。我不知道如何创建这种类型的实例...

这是我尝试过的:

var root = new Form();
root.Controls.Add(new TextBox()
{
   Text = "hello"
});
Type rootSerializerType = Type.GetType("System.ComponentModel.Design.Serialization.RootCodeDomSerializer, System.Design, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", true);
var rootSerializer = Activator.CreateInstance(
   rootSerializerType,
   BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance,
   null,
   null,
   null) as CodeDomSerializer;
IDesignerSerializationManager manager = new DesignerSerializationManager();
var serializationResult = (CodeTypeDeclaration)rootSerializer.Serialize(manager, root);

由于我的管理器对象未正确初始化,因此当我调用 Serialize 方法(如上所示(时,会引发以下异常:

[System.InvalidOperationException] "无法调用此方法 因为序列化管理器没有活动的 序列化会话。

我已经用谷歌搜索并检查了 StackOverflow,但我找不到任何关于如何在我的 .序列化调用。

有什么想法吗?

您需要创建该部分。将最后两行更改为:

DesignerSerializationManager manager = new DesignerSerializationManager();
using (var session = manager.CreateSession())
{
    var serializationResult = (CodeTypeDeclaration)rootSerializer.Serialize(manager, root);
    // handle the result here
}

使用具体的类 DesignerSerializationManager 或 var,因为 IDesignerSerializationManager 接口没有 CreateSession 方法。

最新更新