2013-01-24 39 views
0

我希望能够把通用变量字节数组(将其与EF保存到数据库)通用读/写字节数组

我试着这样说:

public byte[] SerializedParams { get; set; } // property for EF 

... 

public void Write(params object[] args) 
{ 
    var bf = new BinaryFormatter(); 
    using (var ms = new MemoryStream()) 
    { 
     bf.Serialize(ms, args); 

     SerializedParams = ms.ToArray(); 
    } 
} 

public T Read<T>() 
{ 
    var byteSize = Marshal.SizeOf(typeof(T)); 
    using (var ms = new MemoryStream()) 
    { 
     ms.Write(SerializedParams, 0, SerializedParams.Length); 
     var bf = new BinaryFormatter(); 
     var x = bf.Deserialize(ms); // error here 
     return (T)x; 
    } 
} 

变种x = bf.Deserialize(ms);此行会导致错误。 调用后:

qr.Write(5,7,9); 
var i1 = qr.Read<int>(); // error here 
var i2 = qr.Read<int>(); 
var i3 = qr.Read<int>(); 

“流的末尾遇到解析完成之前。”

这是怎么回事?

+0

[写入字符串流和回读不起作用]的可能重复(http://stackoverflow.com/questions/2629612 /写入字符串到流和读它,背不 - 不工作) –

回答

0

尝试将MemoryStream的位置属性设置为0:

public T Read<T>() 
{ 
    var byteSize = Marshal.SizeOf(typeof(T)); 
    using (var ms = new MemoryStream()) 
    { 
     ms.Write(SerializedParams, 0, SerializedParams.Length); 
     var bf = new BinaryFormatter(); 
     ms.Position = 0; // this line should do the trick 
     var x = bf.Deserialize(ms); 
     return (T)x; 
    } 
}