由于您只能将页面添加到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中的错误,但也许有一些深层原因。

10-07 23:09