由于您只能将页面添加到FixedDocument,因此我编写了一个派生类:
public class CustomFixedDocument : FixedDocument
{
public void RemoveChild(object child)
{
base.RemoveLogicalChild(child);
}
}
替换FixedDocument,效果很好,直到我尝试打印文档并收到以下错误:
类型的未处理异常
“ System.Windows.Xps.XpsSerializationException”发生在
ReachFramework.dll
附加信息:此类对象的序列化不是
支持的。
过去,我并没有那么多与序列化相关的工作,并且已经阅读了有关序列化的内容,但是仍然无法解决问题。我也尝试过
[Serializable]
属性,但没有任何区别。
谁能指导我正确的方向或有任何想法做什么?
最佳答案
如果查看该方法的反编译源代码,该方法检查是否支持某些类型,则将大致看到以下内容:
internal bool IsSerializedObjectTypeSupported(object serializedObject)
{
bool flag = false;
Type type = serializedObject.GetType();
if (this._isBatchMode)
{
if (typeof (Visual).IsAssignableFrom(type) && type != typeof (FixedPage))
flag = true;
}
else if (type == typeof (FixedDocumentSequence) || type == typeof (FixedDocument) || (type == typeof (FixedPage) || typeof (Visual).IsAssignableFrom(type)) || typeof (DocumentPaginator).IsAssignableFrom(type))
flag = true;
return flag;
}
在这里,您可以看到该类型应该继承DocumentPaginator,Visual,或者完全属于FixedDocument,FixedDocumentSequence,FixedPage类型。因此,无论您使用什么可序列化的属性,从FixedDocument继承的类型都将不起作用,因此您必须找到其他方法。我认为这是XpsSerializationManager中的错误,但也许有一些深层原因。