我一直在使用PDFView4Net创建PDF表单的项目中工作。虽然该库通常很好,但是在处理表单字段(如文本框、复选框等)时,表单创建器非常简陋且缺乏基本功能(例如复制/粘贴、对齐、格式化等)。
问题:我一直在扩展字段对象的功能,并在复制/粘贴上遇到了问题。为此,我需要完全不引用原始对象的深度副本。我向供应商发送了电子邮件,请求有关他们建议的复制这些对象的方法的信息,他们回复说我需要手动逐个复制每个属性…… 顶着头痛。这些都是大类,具有多个嵌入类作为属性,以及UI元素。
问题是:是否有任何良好的方法可以执行针对复杂对象的深度复制,而不需要序列化,也不需要访问或更改源类,也不需要默认构造函数?
我尝试过/审查过的内容:
- 手动逐个属性:我尝试了7个字段对象(PDFTextBoxField)中的第一个,但是由于有多个属性,这很快变得难以处理。最终,我仍然对原始对象有残留引用,因为创建的是浅复制而不是深复制。
- 序列化:这些类未标记为可序列化,供应商也不会更改。我请求过他们,但是他们拒绝了。
- ICloneable:需要供应商实现。
- AutoMapper:这似乎是将一个或多个对象类型的数据复制到另一个对象类型中。我使用的对象是相同类型的。虽然如果这是最佳解决方案,我也不排斥使用它。
- Emit Mapper:该项目似乎已停止开发。
FormatterServices.GetUninitializedObject(type)
创建一个空实例,不要调用构造函数。 - Anders Forsgren