当前位置 : 主页 > 大数据 > 区块链 >

Protobuf-Net ProtoMember“IsRequired”属性用法

来源:互联网 收集:自由互联 发布时间:2021-06-22
Protobuf-Net ProtoMember“IsRequired”属性的用法是什么? 如果我将新属性(成员)添加到文件中已经序列化的类,它会有什么影响.如果我使用“IsRequired = true”它只是接受它而不加载一个值(因为
Protobuf-Net ProtoMember“IsRequired”属性的用法是什么?

如果我将新属性(成员)添加到文件中已经序列化的类,它会有什么影响.如果我使用“IsRequired = true”它只是接受它而不加载一个值(因为它不在那里)或者我应该将值设置为false?如果我将其设置为false,那么值是否会被正确序列化?

根据 Issue 262: ProtoMembers with IsRequired=true aren’t really required:

Currently, IsRequired primarily impacts serialization, forcing it to ignore some default rules.

当IsRequired为false(默认值)时,默认值不会被序列化,例如整数值0不会被序列化,值为1.

当IsRequired为true时,所有值(包括默认值)都将被序列化.

使用protobuf-net的反序列化当前似乎不受IsRequired属性值的影响.但是,如果您使用不同的Google Protocol Buffers实现进行反序列化,则可能会看到不同的行为.

如果向现有类添加新属性,并在添加属性之前反序列化编写的序列化文件,则不会设置新属性.

网友评论