美文网首页
iOS处理protobuf对象转json遇到的问题

iOS处理protobuf对象转json遇到的问题

作者: 海浪萌物 | 来源:发表于2019-01-15 20:56 被阅读16次

    由于通过protobuf编译器将.proto文件转成OC类的时候会遇到两个问题:
    1、将.proto中定义的属性类别是数组的话,会在属性名后面加上Array,
    2、如果属性名为连续的大写字母时候会自动将属性名变成驼峰格式
    这样如果我们通过YYModel直接将protobuf对象转成json的话就会导致属性名不对应,导致从json中读取不到相应值的问题,解决方法就是更改protobuf编译器去掉这些变动,不让编译器擅自更改属性名,方法如下:

    1、首先这个是讲怎么从源码编译protobuf编译器的,你要自己编译编译器

    https://github.com/protocolbuffers/protobuf/blob/master/src/README.md

    2、编译之前先改编译器源码,把源码下载下来,然后把proto文件转oc文件的部分改成你需要的

    2.1

    https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/compiler/objectivec/objectivec_field.cc

    上面这个文件里的SetCommonFieldVariables方法可以看看,有原始属性名(raw_field_name)和转换之后的驼峰属性名(camel_case_name),你可以尝试把这方法里面用到驼峰属性名的地方都重新指向原始属性名,如图:将文件中的红色圈起来的变量全部改成绿色圈起来的变量


    image.png

    https://github.com/protocolbuffers/protobuf/blob/38abec80fccadc07f8b424c705efa6f5a3afba32/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc

    上面这文件里有驼峰的转换的规则,你可以看看FieldName这个函数,这是转换变量名的,下划线转驼峰,加Array后缀,加p后缀都能看见。。你可以看着改。。这文件里还有转换文件名,枚举名,各种转换。。你得看着自己的需求小心改,如图将圈起来的Array置空即可:


    image.png

    相关文章

      网友评论

          本文标题:iOS处理protobuf对象转json遇到的问题

          本文链接:https://www.haomeiwen.com/subject/hgdudqtx.html