Я бы хотел установить суррогат для 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 = нейтральный, PublicKeyToken = b77a5c561934e089]]
Я не уверен, почему он говорит, что существует встроенное поведение, поскольку причина, по которой я пытался это сделать, состояла в том, чтобы разрешить это исключение, сериализующее класс с DateTimeOffset:
----> System.InvalidOperationException: не определен сериализатор для типа: System.DateTimeOffset
Мы используем DateTimeOffset и Nullable во многих местах в нашем коде, поэтому я хотел бы найти какой-то способ справиться с этим в общем.
Может кто-нибудь указать на мою ошибку?