在protobuf-net中发出值类型的默认值的序列化

时间:2015-09-07 14:50:38

标签: c# .net protobuf-net

在我的项目中,我不仅需要时间,还需要有关UTC偏移的信息。因此我考虑使用DateTimeOffset类。

我没有做任何魔术,只是宣布struct包含short的偏移量和long的刻度线(与DateTimeOffset相同) - 当然还有{ {1}}和ProtoContract属性。

但是:即使没有初始化这个值(两个字段都为零),线上还有2个额外的字节(我用ProtoMember进行了交叉检查)!

我尝试继承class并设置我的默认值 - 但也无济于事。

原因是protobuf-net按名称(DefaultValueAttribute)检查DefaultValueAttribute

MetaType.ApplyDefaultBehaviour(bool isEnum, ProtoMemberAttribute normalizedAttribute)

但即使我改变了这一点,我也会在if ((attrib = GetAttribute(attribs, "System.ComponentModel.DefaultValueAttribute")) != null) { object tmp; if(attrib.TryGet("Value", out tmp)) defaultValue = tmp; } 抱怨中得到例外:

DefaultValueDecorator.Read(Compiler.CompilerContext ctx, Compiler.CodeLabel label)

有谁知道这种限制的原因?

为什么不对值类型使用默认值(T)?

0 个答案:

没有答案