Суррогат протобуф-сети для DateTimeOffset - PullRequest
0 голосов
/ 14 января 2019

Я бы хотел установить суррогат для 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 во многих местах в нашем коде, поэтому я хотел бы найти какой-то способ справиться с этим в общем.

Может кто-нибудь указать на мою ошибку?

...