list<string[]> のbyte[]へのシリアライズ デシリアライズの方法についてお聞したいです
ソケット通信をつかって、クラインアント側からリスト型データを送信したいと思っています。
一応、下記の方法ではできる事が確認がとれています
C#
1 //クライアント側 2 var formatter = new BinaryFormatter(); 3 4 List<string[]> sendlist = new List<string[]>(); 5 sendlist.Add(new string[] { "A", "B", "C" }); 6 7 byte[] sendBytes; 8 9 //Streamでデータをシリアライズ 10 using (var stream = new MemoryStream()) 11 { 12 formatter.Serialize(stream, sendlist); 13 sendBytes = new byte[stream.Length]; 14 sendBytes = stream.GetBuffer(); 15 } 16 17 //ソケット通信で送る*************** 18 19 //サーバー側 20 var formatter = new BinaryFormatter(); 21 22 byte[] resBytes = new byte[1024]; 23 int resSize = 0; 24 resSize = ns.Read(resBytes, 0, resBytes.Length); 25 26 //Streamでデータをデシリアライズ 27 using (MemoryStream stream = new MemoryStream()) 28 { 29 stream.Write(resBytes, 0, resSize);- 30 stream.Seek(0, SeekOrigin.Begin);- 31 List<string[]> reseveList = (List<string[]>) formatter.Deserialize(stream); 32 } 33 34
しかし、確認不足もありますが、クライアント側の端末がNET Compact Framework 3.5 でBinaryFormatterが対応していない状態です。
他に方法がないか調べていますが、下記の方法でbyte[]への変換ができたものの、サーバー側でデシリアライズが上手く行きません。
C#
1 //クライアント側 2 List<string[]> list = new List<string[]>(); 3 list.Add(new string[] { "A", "B", "C" }); 4 5 byte[] sendBytes; 6 7 using (var stream = new MemoryStream()) 8 { 9 var write = new StreamWriter(stream); 10 write.Write(list); 11 write.Flush(); 12 sendBytes = new byte[stream.Length]; 13 sendBytes = stream.GetBuffer(); 14 } 15 16 //ソケット通信で送る*************** 17 18 //サーバー側 19 byte[] resBytes = new byte[1024]; 20 int resSize = ns.Read(resBytes, 0, resBytes.Length); 21 22 // Streamでデータをデシリアライズする。 23 using (MemoryStream stream = new MemoryStream()) 24 { 25 stream.Write(resBytes, 0, resSize); 26 stream.Seek(0, SeekOrigin.Begin); 27 **ここから先がどうしていいかわからない** 28 } 29
ソケット通信とシリアライズなどはここ2日で勉強を始めており基本的な部分が抜けているかと思います
もし他に方法があれば教えてください
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/11 00:42
2021/05/11 02:01