【发布时间】:2023-04-02 17:25:01
【问题描述】:
编辑:问题出在Nancy。 Protobuf-net(反)序列化标记的私有字段就好了。
我正在运行一个 NetCore 2.0 单元测试项目。即使有 [ProtoMember] 属性,Protobuf-net 似乎也被忽略了私有字段。
[ProtoContract]
internal class Model
{
[ProtoMember(1)]
public int Example { get; private set; } // Works
[ProtoMember(2)]
private List<int> _a; // Not deserialized unless made public
public IEnumerable<int> A => this._a;
public Model(int example, IEnumerable<int> a)
{
this.Example = example;
this._a = a.ToList(); // Copy prevents mutation
}
private Model() // For deserialization
{
}
}
我使用了公共IEnumerable<int> 来避免可变性并隐藏实现细节。它由私有 List<int> 支持以允许序列化。但是,protobuf-net 只会de在我公开该字段时对其进行序列化。另一方面,序列化实际上会包含数据,即使该字段是私有的。
这是预期的行为吗?是否有一种干净的方法可以让 protobuf-net 在反序列化时尊重标记的私有字段?
附:对于非集合成员也可以看到相同的行为,但我已经用IEnumerable/List 进行了演示,因为它说明了这种方法的原因。
【问题讨论】:
标签: serialization .net-core protobuf-net .net-standard private-members