0

C# でオブジェクトをシリアル化した後、データベースにアップロードすると、各 16 進文字列は次のようになります。

0x0001000000FFFFFFFF01000000000000000C0200000046496E76656E746F72794F626A6563742C2056657273696F6E3D312E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D6E756C6C050100000019496E76656E746F72792E496E76656E746F72794F626A65637404000000

逆シリアル化したときに、各オブジェクトが同じであることを期待していました(コードのエラーを意味します)。しかし、そうではなく、正しい一意のオブジェクトを表しています。

SQLサーバーで何らかのポインタの関連付けが行われていますか?

シリアル化方法:

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 ;
    }
4

1 に答える 1

4

私はそれを考え出した。SQL Server 2000 では、16 進文字列が特定の長さを超えている場合、クエリ アナライザでその文字列全体が表示されません。したがって、私の16進文字列は実際には異なります。

于 2013-09-18T15:37:07.550 に答える