protobuf版本和DateTimeOffset

时间:2016-03-09 22:50:42

标签: protobuf-net datetimeoffset

我有一个使用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本地方式来序列化此类型?是否有任何理由改变这种行为?

1 个答案:

答案 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));

这似乎很好。