直接将 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);
}
我有一个接收 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);
}