直接将 XmlSerializer 与 BinaryWriter 一起使用 - 可能吗?

Using XmlSerializer directly with BinaryWriter - is it possible?

我有一个接收 BinaryWriter 的方法,它本身环绕着一个 FileStream。

    public void Serialize(BinaryWriter writer)  // signature defined by interface
    {
        var serializer = new XmlSerializer(typeof(ThisType));
        MemoryStream stream;
        using (stream = new MemoryStream())
        {
            serializer.Serialize(stream, this);                
        }
        writer.Write(stream.ToArray());
    }

由于 XmlSerializer 需要一个 Stream,我需要创建一个 MemoryStream 来序列化它。

我想知道是否可以通过 writer 直接序列化到 FileStream,从而保留方法签名(它是接口的一部分)。

BinaryWriter 不是 "real" 流(它不是子class Stream)。它更像是一个 class 围绕 "real" 流的实用程序(当然它不是 TextWriter subclass,XmlSerializer 的另一个选项)。

不过,从BinaryWriter你可以得到BaseStream,所以:

public void Serialize(BinaryWriter writer)  // signature defined by interface
{
    var serializer = new XmlSerializer(this.GetType());
    serializer.Serialize(writer.BaseStream, this);
}