byte[]到强类型数组



我在将大字节[]数组转换为强类型数组时遇到一些问题。

  1. 我有一个数组,它被连接成一个大字节[]数组并存储在一个表中
  2. 然后我想读取这个byte[]数组,但将其转换为强类型数组

由于我已经将整个数组存储为byte[]数组,我可以不读取该字节数组并将其转换为强类型版本吗目前它返回null

这有可能一蹴而就吗?

提前谢谢,奥南。

<code>
    #region Save
    public void Save<T>(T[] Array) where T : new()
    {
        List<byte[]> _ByteCollection = new List<byte[]>();
        byte[] _Bytes = null;
        int _Length = 0;
        int _Offset = 0;
        foreach (T _Item in Array)
        {
            _ByteCollection.Add(Serialise(_Item));
        }
        foreach (byte[] _Byte in _ByteCollection)
        {
            _Length += _Byte.Length;
        }
        _Bytes = new byte[_Length];
        foreach (byte[] b in _ByteCollection)
        {
            System.Buffer.BlockCopy(b, 0, _Bytes, _Offset, b.Length);
            _Offset += b.Length;
        }
        Customer[] c = BinaryDeserialize<Customer[]>(_Bytes);
    }
    #endregion
    #region BinaryDeserialize
    public static T BinaryDeserialize<T>(byte[] RawData)
    {
        T _DeserializedContent = default(T);
        BinaryFormatter _Formatter = new BinaryFormatter();
        try
        {
            using (MemoryStream _Stream = new MemoryStream())
            {
                _Stream.Write(RawData, 0, RawData.Length);
                _Stream.Seek(0, SeekOrigin.Begin);
                _DeserializedContent = (T)_Formatter.Deserialize(_Stream);
            }
        }
        catch (Exception ex)
        {
            _DeserializedContent = default(T);
        }
        return _DeserializedContent;
    }
    #endregion
</code>

我认为问题是将每个项序列化到一个列表中,然后连接字节。当这被取消序列化时,它看起来就像是一个客户的数据加上最后的一些意外数据(其他客户)。

我不知道你的序列化方法是如何工作的,但你可能只需要更改代码:

    foreach (T _Item in Array)
    {
        _ByteCollection.Add(Serialise(_Item));
    }

收件人:

_ByteCollection.Add(Serialise(Array));

这应该行得通,然后你可能会把它简化一点。

很可能是线

_DeserializedContent = (T)_Formatter.Deserialize(_Stream);

引发异常。在catch块中,您只需吞下并忽略该异常。

最新更新