Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlDictionaryReader读取固定大小的归零流_C#_Serialization_Xml Serialization_Datacontractserializer_.net 4.5 - Fatal编程技术网

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();
}