覆盖内置类型的序列化方法

时间:2013-05-21 13:44:52

标签: protobuf-net

我需要在运行时或至少在模型初始化期间为某些内置类型(例如DateTime)切换不同的序列化方法。这样做的最佳方法是什么? 我尝试使用自定义模型(RuntimeTypeModel.Add(typeof(DateTime), false).SetSurrogate(typeof(uint)))替代它们,但得到错误“此类数据具有内置行为,无法添加到模型中”。

1 个答案:

答案 0 :(得分:2)

说实话,这不是我认真考虑的一个场景。对于大多数“内置行为”类型,改变实现是一个非常糟糕的主意,因为它是protobuf特定的一部分;但是,对于DateTimeTimeSpanDecimalGuid,可能会支持其他替代布局。我可以问你想在这里做什么?因为可能有更好的方法来做到这一点。同样重要的是:幅度是多少?如果只是少数几种情况,则可能更喜欢垫片属性,例如:

public DateTime When {get;set;}
[ProtoMember(4)]
private uint WhenSerialized {
   get { return YourConverter.FromDateTime(When); }
   set { When = YourConverter.ToDateTime(value); }
}

也可以为这些类型启用“代理”处理,但是您不能使用代理直接转到uint(您可以使用代理来到struct或者class 一个uint

相关问题