C# XmlDictionaryReader读取固定大小的归零流
有人能给我一个很好的解释为什么这会失败吗C# XmlDictionaryReader读取固定大小的归零流,c#,serialization,xml-serialization,datacontractserializer,.net-4.5,C#,Serialization,Xml Serialization,Datacontractserializer,.net 4.5,有人能给我一个很好的解释为什么这会失败吗 const int bufferSize = 2 * 1024, testValue = 123456; var buffer = new byte[bufferSize]; var serializer = new DataContractSerializer(typeof(int)); //Serialize value using (var memStream = new MemoryStream(buffer)) using (XmlDict
const int bufferSize = 2 * 1024, testValue = 123456;
var buffer = new byte[bufferSize];
var serializer = new DataContractSerializer(typeof(int));
//Serialize value
using (var memStream = new MemoryStream(buffer))
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateBinaryWriter(memStream))
serializer.WriteObject(writer, testValue);
//Deserialize value
using (var memStream = new MemoryStream(buffer))
using (XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(memStream, XmlDictionaryReaderQuotas.Max))
{
object deserializedValue = serializer.ReadObject(reader); // <--- nope, this throws System.Runtime.Serialization.SerializationException: The input source is not correctly formatted.
Console.WriteLine(deserializedValue);
}
const int bufferSize=2*1024,testValue=123456;
var buffer=新字节[bufferSize];
var serializer=新的DataContractSerializer(typeof(int));
//序列化值
使用(var memStream=newmemoryStream(缓冲区))
使用(XmlDictionaryWriter=XmlDictionaryWriter.CreateBaryWriter(memStream))
serializer.WriteObject(writer,testValue);
//反序列化值
使用(var memStream=newmemoryStream(缓冲区))
使用(XmlDictionaryReader=XmlDictionaryReader.CreateBinaryReader(memStream,XmlDictionaryReaderQuotas.Max))
{
object deserializedValue=serializer.ReadObject(reader);//当然我会帮你解决这个问题(因为没有其他人会费心去确认/否认症状)
我发现读卡器读取无效数据确实存在问题。不过,您可以通过在流的末尾写入空格来帮助它,如下所示:
//Serialize value
using (var memStream = new MemoryStream(buffer))
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateBinaryWriter(memStream))
{
serializer.WriteObject(writer, testValue);
writer.WriteWhitespace(" ");
}
//Deserialize value
using (var memStream = new MemoryStream(buffer))
using (XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(memStream, XmlDictionaryReaderQuotas.Max))
{
object deserializedValue = serializer.ReadObject(reader); // \o/
Console.WriteLine(deserializedValue);
}
真不敢相信没有人会这么喜欢这个问题,因为它可能会导致运行时难以调试异常,从而使使用XmlDictionaryWriter序列化对象有点不可靠
连接报告:您需要添加Flush()命令:
资料来源:
//Serialize value
using (var memStream = new MemoryStream(buffer))
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateBinaryWriter(memStream))
{
serializer.WriteObject(writer, testValue);
writer.WriteWhitespace(" ");
}
//Deserialize value
using (var memStream = new MemoryStream(buffer))
using (XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(memStream, XmlDictionaryReaderQuotas.Max))
{
object deserializedValue = serializer.ReadObject(reader); // \o/
Console.WriteLine(deserializedValue);
}
//Serialize value
using (var memStream = new MemoryStream(buffer))
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateBinaryWriter(memStream))
{
serializer.WriteObject(writer, testValue);
writer.Flush();
}