2

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

4

1 回答 1

2

老实说,这不是我考虑过的场景。对于大多数“内置行为”类型,更改实现将是一个非常糟糕的主意,因为它是 protobuf 特定的一部分;但是,在 、 和 的情况下,可能DateTime还有其他可以支持的布局。我能问一下你到底想在这里做什么吗?因为可能有更好的方法来做到这一点。同样重要的是:量级是多少?如果只是少数情况,那么 shim 属性可能更可取,例如:TimeSpanDecimalGuid

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

也可以为这些类型启用“代理”处理,但您不能使用代理直接访问 a uint(不过,您可以使用代理访问 astructclass具有a 的uint

于 2013-05-22T07:15:51.420 回答