我有一个使用protobuf-net版本1.0.0.278的应用程序,我有一个包含该字段的对象:
/*!
* Author: Michael R. Draemel
* http://draemel.com/
*/
$('.resume_hire p').click(function() {
$('.resume_contact_info').toggleClass('flipped');
});
我不确定在序列化/反序列化包含它的对象时是否正确地序列化和反序列化了,但是在这两个操作中都没有引发异常。
最近我更新到protobuf-net版本2.0.0.621,现在我得到一个System.InvalidOperationException,调用ProtoBuf.Serializer.PrepareSerializer<>。消息显示"没有为类型定义序列化程序:System.Nullable`1 [[System.DateTimeOffset,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]"。
是否有protobuf-net本地方式来序列化此类型?是否有任何理由改变这种行为?
答案 0 :(得分:1)
我创建了这个代理类:
[ProtoContract]
public class DateTimeOffsetProxy
{
[ProtoMember(1)] public DateTime UtcTime;
[ProtoMember(2)] public TimeSpan Offset;
public static implicit operator DateTimeOffsetProxy(DateTimeOffset value)
{
return new DateTimeOffsetProxy()
{
UtcTime = value.UtcDateTime,
Offset = value.Offset
};
}
public static implicit operator DateTimeOffset(DateTimeOffsetProxy value)
{
var result = new DateTimeOffset(value.UtcTime);
return result.ToOffset(value.Offset);
}
}
然后我注册了它:
Model = RuntimeTypeModel.Default;
Model.Add(typeof(DateTimeOffset),
false).SetSurrogate(typeof(DateTimeOffsetProxy));
这似乎很好。