0

J'utilise une combinaison de protobuf-net (serveur) et de protobuf.js (client du navigateur).Protobuf.js .toObject() avec les types .NET

J'ai un .proto comme ceci:

package Testy; 
import "bcl.proto"; // schema for protobuf-net's handling of core .NET types 

message Foo { 
    optional int32 ID = 1 (default = 0); 
    optional bcl.Decimal Bar = 2 (default = 0); 
} 

Lorsque je décode un Foo ArrayBuffer et appelez .toObject (entrant) comment puis-je brancher dans un convertisseur de bcl.Decimal?

var testyPackage = "package Testy; import ... (continued)"; 
var bclPackage = "package bcl; message TimeSpan ... (continued)", 
    protoRoot = new protobuf.Root(); 
protobuf.parse(bclPackage, protoRoot); 
protobuf.parse(testyPackage, protoRoot); 

var buffer = new Uint8Array(someArrayBufferSomewhere..), 
    msg = protoRoot.Testy.Foo.decode(buffer); 


function convertsBclDecimalToNumber(bclDecimal) { 
    ... 
} 

var obj = msg.toObject({Decimal: convertsBclDecimalToNumber}) //This won't work 

Répondre

0

Voici comment je le fais, mais est-ce la façon dont la bibliothèque a voulu?

var x = protoRoot.Testy.Foo.decode(buffer); 
protoRoot.lookup("bcl.Decimal").toObject = myBclDecimalConverterFunctionReference 
return x.toObject(); 
+0

Il n'existe aucun moyen prévu pour y parvenir. Votre solution me semble bonne. – dcode

+0

Gloire à toi! Merci mec. – MaitlandMarshall