为什么我的十六进制字符串在服务器上完全相同。但反序列化时是不同的对象

时间:2013-09-18 15:24:05

标签: c# sql-server serialization

在C#中序列化对象后,我将其上传到我的数据库,每个十六进制字符串如下所示:

0x0001000000FFFFFFFF01000000000000000C0200000046496E76656E746F72794F626A6563742C2056657273696F6E3D312E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D6E756C6C050100000019496E76656E746F72792E496E76656E746F72794F626A65637404000000

当我反序列化时,我期望每个对象都是相同的(意思是代码中的错误)。但它们不是,而是代表正确的唯一对象。

在sql server中是否发生了某种指针关联?

序列化方法:

public  byte[] serialize()
{
    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    bf.Serialize(ms, this); //NOTE: this refers to a InventoryObject
    byte[] returnVal = ms.ToArray();
    ms.Close();
    return returnVal;
}

反序列化方法:

    public static InventoryObject deserialize(byte[] arrBytes)
    {
        MemoryStream memStream = new MemoryStream();
        BinaryFormatter binForm = new BinaryFormatter();
        memStream.Write(arrBytes, 0, arrBytes.Length);
        memStream.Seek(0, SeekOrigin.Begin);
        InventoryObject obj = (Object)binForm.Deserialize(memStream) as InventoryObject;

        return obj ;
    }

1 个答案:

答案 0 :(得分:4)

我明白了。如果SQL server 2000大于某个长度,则它不会在查询分析器中显示整个十六进制字符串。因此,我的十六进制字符串实际上是不同的。