首页 > 解决方案 > 设置为 0 的整数被序列化(使用 protobuf-net)为空。有什么办法可以解决这个问题?

问题描述

设置为 0 的整数值被序列化为 null。似乎 0 被视为默认值并在序列化过程中被忽略。有没有办法解决这个问题?

标签: protobuf-net

解决方案


默认情况下,protobuf-net 遵循零 ===default===not-serialized 的 proto3 约定,但您可以通过使用IsRequiredon覆盖此行为ProtoMemberAttribute

[ProtoMember(42, IsRequired = true)]
public int Foo {get;set;}

或者,在更高级的场景中,您可以使用“条件序列化”(同样的方法适用于各种序列化程序):

[ProtoMember(42)]
public int Foo {get;set;}

public bool ShouldSerializeFoo() { /* your own rules here */ }

推荐阅读