文字列を使用してオブジェクトをシリアル化/逆シリアル化したいと思います。注記すると、私がシリアル化/デシリアライズすると、すべて正常に動作します。私がしようとしているのは、文字列を取得してデータベースに格納し、後でそれを取り出してデシリアライズすることです。ここでprotobuf-net文字列にシリアル化してデータベースに格納してからシリアル化する
は動作するコードです:
MemoryStream msTest = new MemoryStream();
Serializer.Serialize(msTest, registrationBlocks);
msTest.Position = 0;
List<RVRegistrationBlock> CopiedBlocks = new List<RVRegistrationBlock>();
CopiedBlocks = Serializer.Deserialize<List<RVRegistrationBlock>>(msTest);
「CopiedBlocks」オブジェクト「はregistrationBlocks」にあった同じリストは偉大な、すべてがシリアライズさ/デシリアライズされた作品です。私はここに流れのすべてを守っています。
ここは私が関与文字列を取得しようとすると、動作しないコードです:それはデシリアライズするために行くとき、最後の行で
MemoryStream msTestString = new MemoryStream();
Serializer.Serialize(msTestString, registrationBlocks);
msTestString.Position = 0;
StreamReader srRegBlock = new StreamReader(msTestString);
byte[] bytedata64 = System.Text.Encoding.Default.GetBytes(srRegBlock.ReadToEnd());
string stringBase64 = Convert.ToBase64String(bytedata64);
byte[] byteAfter64 = Convert.FromBase64String(stringBase64);
MemoryStream afterStream = new MemoryStream(byteAfter64);
List<RVRegistrationBlock> CopiedBlocksString = new List<RVRegistrationBlock>();
CopiedBlocksString = Serializer.Deserialize<List<RVRegistrationBlock>>(afterStream);
、私は例外を取得:タイプの例外「いるProtobuf。 ProtoException 'がスローされました。私はそれにドリルすることはできません、内部の例外はnullです。なぜそれがそれをやっているのか分かりません。
私は文字列を取得すると、それはひそかになるという事実に至りました。私は文字列を必要とする理由は、nvarchar(最大)のデータベースに文字列を格納しています。
ご迷惑をおかけして申し訳ございません。
良い答え。あなたが望むなら、* Convert.ToBase64String(msTestString.GetBuffer()、0、(int)msTestString.Length) 'という特別なマイナーな最適化があります。しかし、それは "そのまま"動くでしょう。 –