我在我的应用程序中使用protobuf-net进行序列化/反序列化.我正面临一个问题.
[ProtoContract()]
ClsTest
{
private bool _isPeriodic
[ProtoMember(1)]
public bool IsPeriodic
{
get
{
return _isPeriodic;
}
set
{
isPeriodic = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的collction对象中使用这个类.
序列化过程工作正常,但在反序列化后,默认情况下,属性IsPeriodic的值为true,尽管在某些情况下它是错误的.谁能帮我?
我的猜测是,你的代码设置IsPeriodic到true默认new情况下,也许是:
private bool _isPeriodic = true;
Run Code Online (Sandbox Code Playgroud)
或者,在构造函数中,您有:
_isPeriodic = true; // or IsPeriodic = true
Run Code Online (Sandbox Code Playgroud)
基本上,有一个隐式默认值(遵循protobuf语言指南)where-by bool被假定为默认值false.它不会发送被认为是默认值的数据.如果此默认值不正确,请告诉它:
[ProtoMember(1), DefaultValue(true)]
Run Code Online (Sandbox Code Playgroud)
或IIRC你可以尝试设置IsRequired来true代替:
[ProtoMember(1, IsRequired = true)]
Run Code Online (Sandbox Code Playgroud)
并且还有一些其他方法可以告诉它始终发送值:
private bool ShouldSerializeIsPeriodic() { return true;}
Run Code Online (Sandbox Code Playgroud)
(使用由核心.NET支持的模式相同PropertyGrid,XmlSerializer,PropertyDescriptor,等-这是不是我发明了随机模式)
请注意,在"v2"中,我进行了两次更改以帮助消除这种奇怪之处: