直入正题放代码:
import proto from './proto/proto.js';
import protobufjs from 'protobufjs';
const root = protobufjs.Root.fromJSON(proto);
const adasRoot = root.lookupType('Adas');
const adasObj = {
header:{},
dcd_adas:{
value:0
}
}
const adasReq = adasRoot.create(adasObj);
const adasErrmsg = adasRoot.verify(adasReq);
if(adasErrmsg){
console.info('adas',adasErrmsg)
}else{
console.info('no adas error')
}
代码到此为止没有问题,root.verify()验证也没有错误出现,紧接着尝试进行序列化和反序列化并打印出来看看结果:
const adasDe = adasRoot.decode(adasReq).finish();
const adasEn = adasRoot.encode(adasDe);
console.log(adasDe,adasEn);
然后就发现打印出来的Uint8Array是个只有2字节的数据,而反序列化后的对象也是只包含一个header:{}的数据。
查了半天,中间过程不说了,最终找到了问题所在:
进行message定义时使用下划线连接小写字母的方式定义属性后,在实例中要将其转换为驼峰式写法它才能识别该属性,否则就直接不识别并将其掠过。
最后将实例对象写法改为:
const adasObj = {
header:{ },
dcdAdas:{
value:0
}
}
后,序列化和反序列化全部没有问题了。