0

Protobuf-net を使用して、別のプロジェクトで実行している Web アプリケーションにシリアル化されたオブジェクトを送信しようとしています。このSerializer.Serialize<T>()メソッドは、ストリーム (書き込み先) と T のインスタンス (この場合、protobuf-net で動作するように設定したいくつかのオブジェクトのリスト) を取ります。

どうすればこれを行うことができますか?ファイルに書き込む必要がありますか、それともストリームをポストデータとして送信できますか? 以下では、ポストデータとして文字列を使用していることがわかります。

私のexecute postメソッド

public static void ExecuteHttpWebPostRequest(Uri uri,string postdata, int requestTimeOut, ref string responseContent)
    {
        if (string.IsNullOrEmpty(uri.Host))// || !IsConnectedToInternet(uri))
            return;
        var httpWebReq = (HttpWebRequest)WebRequest.Create(uri);
        var bytePostData = Encoding.UTF8.GetBytes(postdata);
        httpWebReq.Timeout = requestTimeOut*1000;
        httpWebReq.Method = "POST";
        httpWebReq.ContentLength = bytePostData.Length;
        //httpWebReq.ContentType = "text/xml;charset=utf-8";
        httpWebReq.ContentType = "application/octet-stream";
        //httpWebReq.TransferEncoding=
        //httpWebReq.ContentType = "application/xml";
        //httpWebReq.Accept = "application/xml";
        var dataStream = httpWebReq.GetRequestStream();

        dataStream.Write(bytePostData, 0, bytePostData.Length);
        dataStream.Close();
        var httpWebResponse = (HttpWebResponse)httpWebReq.GetResponse();

        // Get the stream associated with the response.
        var receiveStream = httpWebResponse.GetResponseStream();

        // Pipes the stream to a higher level stream reader with the required encoding format. 
        var readStream = new StreamReader(receiveStream,Encoding.Default);
        responseContent = readStream.ReadToEnd();
        httpWebResponse.Close();

    }
4

1 に答える 1

1

リクエストにシリアル化できます:

Serializer.Serialize(dataStream, obj);

同様に、必要に応じて から逆シリアル化することもできreceiveStreamます。

ただし、protobuf データはテキストではないため、そのように扱うべきではないことに注意してください。これを試みると、非常に悪いことが起こります。

于 2013-06-18T13:54:44.683 に答える