私は .NET スマート カードを使用しています。.NET リモート処理と同じ概念を持っています。
したがって、私のスマートカード (サーバーとして) には次のサービスがあります。
public class MyService : MarshalByRefObject
{
     string a = "abC";
    public byte[] MySampleMethod()
    {
        MyService obj = new MyService();
        return help.ObjectToByteArray( obj);
    }}}
これは ObjectToByteArray(obj) です
public static byte[] ObjectToByteArray(MyService obj)
    {
        if (obj == null)
            return null;
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream(0);
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }
クライアントに関して:
    public static void Main()
    {
        // create and register communication channel
        APDUClientChannel channel = new APDUClientChannel();
        ChannelServices.RegisterChannel(channel);
        // get the referenc to remote object
        MyService service = (MyService)Activator.GetObject(typeof(MyService), URL);
        // invoke the remote method
        byte[] result = service.MySampleMethod();
        MyService obj = ByteArrayToObject(result);
        Console.WriteLine(result[0]);
        Console.ReadLine();
        // unregister the communication channel
        ChannelServices.UnregisterChannel(channel);
    }
ByteArrayToObject
    public static MyService ByteArrayToObject(byte[] arrBytes)
    {
        MemoryStream memStream = new MemoryStream(0);
        BinaryFormatter binForm = new BinaryFormatter();
        memStream.Write(arrBytes, 0, arrBytes.Length);
        memStream.Seek(0, SeekOrigin.Begin);
        //memStream.Position = 0;
        MyService obj = (MyService)binForm.Deserialize(memStream);
        return obj;
    }
問題は、オブジェクトをデシリアライズしたいときです。
この文字列 "ABCDE" をテストし、カードにシリアル化すると、結果の 16 進数は次のようになります。
1C-5D-D2-00-27-11-02-00-00-00-05-00-00-00-05-00-00-00-01-41-00-42-00-43-00- 44-00 -45-00
PCでシリアル化したときの結果は次のとおりです。
00-01-00-00-00-FF-FF-FF-FF-01-00-00-00-00-00-00-00-06-01-00-00-00-05-41-42- 43-44 -45-0B。
したがって、私の PC アプリケーションでは、2 番目の文字列の逆シリアル化はうまく機能しますが、最初の文字列 (スマート カードから) を逆シリアル化すると、次のようになりました。
「入力ストリームは有効なバイナリ形式ではありません。開始内容 (バイト単位) は次のとおりです: 1C-5D-D2-00-27-11-02-00-00-00-05-00-00-00-05- 00-00...」