【问题标题】:Using XmlSerializer directly with BinaryWriter - is it possible?直接将 XmlSerializer 与 BinaryWriter 一起使用 - 可能吗?
【发布时间】:2015-03-25 14:59:46
【问题描述】:

我有一个接收 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 具有BaseStream 属性

标签: c# xml file serialization stream


【解决方案1】:

BinaryWriter 不是“真正的”流(它不是 Stream 的子类)。它更像是一个围绕“真实”流的实用程序类(当然它不是TextWriter 子类,XmlSerializer 的另一种选择)。

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

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

【讨论】:

  • 非常好。现在假设我可以为Serialize 方法选择我想要的任何签名,你有没有比传递BinaryWriter 更好的选择?也许传递一个流?或者可能是BinaryWriterTextWriter的一些通用基类?你怎么看? (感谢您的回答!)
  • @heltonbiker 如果你想控制编码,那么你应该传递一个StreamWriter/XmlWriter,否则一个BinaryWriter 是完全可以的。
  • 是的,没错。我将继续使用您的代码,因为它直接序列化到最终流,我什至不必将手放在编码字节数组本身(封装)中。谢谢。
猜你喜欢
  • 2015-03-15
  • 2011-02-09
  • 2012-12-30
  • 1970-01-01
  • 2015-10-11
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多