我想为Nullable设置代理。我查看了各种示例,我认为我所做的是正确的:
[ProtoContract]
public class DateTimeOffsetProxy
{
[ProtoMember(1)] public DateTime? UtcTime;
public static implicit operator DateTimeOffsetProxy(DateTimeOffset? value)
{
return new DateTimeOffsetProxy() {UtcTime = value?.UtcDateTime};
}
public static implicit operator DateTime?(DateTimeOffsetProxy value)
{
return value.UtcTime;
}
}
然后我要做的是一个静态构造函数:
Model = RuntimeTypeModel.Default;
Model.AllowParseableTypes = true;
Model.Add(typeof(DateTimeOffset?),false)
.SetSurrogate(typeof(DateTimeOffsetProxy));
在致电Add时,我遇到了以下异常:
System.ArgumentException:此类型的数据具有固有的行为,因此不能通过以下方式添加到模型中:System.Nullable`1 [[System.DateTimeOffset,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]
我不确定为什么要说存在内在行为,因为我尝试这样做的原因是解决了使用DateTimeOffset序列化类的此异常:
----> System.InvalidOperationException:未为以下类型定义序列化程序:System.DateTimeOffset
我们在代码中的很多地方都使用了DateTimeOffset和Nullable,所以我想提出一些通用的方法。
有人可以指出我的错误吗?