リクエストWebApi
を介してコントローラーから Html ページにオブジェクトを送信したいと考えています。Ajax
JS でオブジェクトを受け取ると、それは空です。しかし、サーバー側では、オブジェクトを見るとbyte[].length
0 より大きいため、オブジェクトは空ではありません。
- サーバー側では、Google が提供する dllを使用します。
JS 側では、ProtobufJS ライブラリを使用します。これは私の
.proto
ファイルです:syntax="proto3"; message Container { repeated TestModel2 Models = 1; } message TestModel2 { string Property1 = 1; bool Property2 = 2; double Property3 = 3; }
サーバーコード:
var container = new Container(); var model = new TestModel2 { Property1 = "Test", Property2 = true, Property3 = 3.14 };
コンテナ.Models.Add(モデル);
Base64 データ:
ChEKBFRlc3QQARkfhetRuB4JQA==
JS デコード:
var ProtoBuf = dcodeIO.ProtoBuf; var xhr = ProtoBuf.Util.XHR(); xhr.open( /* method */ "GET", /* file */ "/XXXX/Protobuf/GetProtoData", /* async */ true ); xhr.responseType = "arraybuffer"; xhr.onload = function (evt) { var testModelBuilder = ProtoBuf.loadProtoFile( "URL_TO_PROTO_FILE", "Container.proto").build("Container"); var msg = testModelBuilder.decode64(xhr.response); console.log(JSON.stringify(msg, null, 4)); // Correctly decoded } xhr.send(null);
JS コンソールの結果オブジェクト:
{ "Models": [] }
bytebuffer.js
- protobuf.js v5.0.1