c# - 如何使protubuf-net在反序列化时不考虑默认数组值
问题描述
我使用 protobuf-net 版本 2.3.13。
简单代码:
[ProtoContract]
public class Data
{
[ProtoMember(1)]
public bool[] Flags = new bool[3] { true, true, true };
}
var data = new Data();
// change Flags for example so:
data.Flags = new bool[3] { false, false, false };
// serialize data to file
// deserialize value from file to newData
// now newData.Flags has six bool values { true, true, true, false, false,
// false }
// but i need { false, false, false }
因为据我了解,protobuf-net 首先使用数组的默认值创建类的实例,然后从文件中添加但不替换其值。
是否可以让 protubuf-net 在反序列化时不考虑默认数组值?
解决方案
这里的问题是 protobuf-net 通过附加数据来反序列化列表(等)数据。
解决方案是使用设置属性 SkipConstructor=true 将列表初始化从 ctor 移动到构造函数。
[ProtoContract(SkipConstructor=true)]
public class Data
{
[ProtoMember(1)]
public bool[] Flags;
public Data()
{
Falgs = new bool[3] { true, true, true }
}
}
推荐阅读
- python - 为树中的每个节点生成 ID
- c# - 创建依赖于 netstandard 包的 netcore 3.0 项目的 NuGet 包
- spring-boot - openapi 3.0 中所有 API 的强制标头
- javascript - ReactJs 道具在 componentDidMount 中返回未定义
- ios - 如何在 Xcode 项目中使用 C 库?
- image - 在 SwiftUI 中使用 PencilKit 将绘图转换为图像
- sas - 比较 SAS 中不同版本的 PDF 文档
- java - 使用 @Query 调用存储过程会导致异常:调用 ProcedureName 时参数的数量或类型错误
- return - 中断 LPC 微控制器上的寄存器写操作
- javascript - 跨浏览器 3D 动画