ProtoBuf + DateOnly

Hi. I’m making extensive use of DateOnly for a project and am experimenting now with ProtoBuf for the first time. I’m hitting the error when ProtoBuf tries to serialise a DateOnly. I’ve added the DataContract to class attribute to the DateOnly class dynamically at runtime in my apphost constructor, but still encounter the following error - any ideas if/how I can support such a thing?

15:32:45 ERR [CorrId:] No serializer for type System.DateOnly is available for model Model
[ServiceStack.ServiceStackHost] Properties: [{}]
System.InvalidOperationException: No serializer for type System.DateOnly is available for model Model
at ProtoBuf.Internal.ThrowHelper.ThrowInvalidOperationException(String message, Exception innerException) in //src/protobuf-net.Core/Internal/ThrowHelper.cs:line 55
at ProtoBuf.Meta.TypeModel.NoSerializer[T](TypeModel model) in /
/src/protobuf-net.Core/Meta/TypeModel.cs:line 1369
at ProtoBuf.Meta.TypeModel.GetSerializer[T](TypeModel model, CompatibilityLevel ambient) in //src/protobuf-net.Core/Meta/TypeModel.cs:line 1413
at ProtoBuf.Serializers.MapSerializer3.GetSerializer(TypeModel model, SerializerFeatures keyFeatures, SerializerFeatures valueFeatures, ISerializer1 keySerializer, ISerializer1 valueSerializer) in /_/src/protobuf-net.Core/Serializers/MapSerializer.cs:line 54 at ProtoBuf.Serializers.MapSerializer3.WriteMap(State& state, Int32 fieldNumber, SerializerFeatures features, TCollection values, SerializerFeatures keyFeatures, SerializerFeatures valueFeatures, ISerializer1 keySerializer, ISerializer1 valueSerializer) in /
/src/protobuf-net.Core/Serializers/MapSerializer.cs:line 69
at ProtoBuf.Serializers.MapSerializer3.ProtoBuf.Serializers.IRepeatedSerializer<TCollection>.WriteRepeated(State& state, Int32 fieldNumber, SerializerFeatures features, TCollection values) in /_/src/protobuf-net.Core/Serializers/MapSerializer.cs:line 46 at ProtoBuf.ProtoWriter.State.WriteAny[T](Int32 fieldNumber, SerializerFeatures features, T value, ISerializer1 serializer) in //src/protobuf-net.Core/ProtoWriter.State.WriteMethods.cs:line 364
at ProtoBuf.Internal.KeyValuePairSerializer2.Write(State& state, KeyValuePair2 value) in /
/src/protobuf-net.Core/Internal/KeyValuePairSerializer.cs:line 58
at ProtoBuf.ProtoWriter.WriteMessage[T](State& state, T value, ISerializer1 serializer, PrefixStyle style, Boolean recursionCheck) in /_/src/protobuf-net.Core/ProtoWriter.cs:line 258 at ProtoBuf.Serializers.ConcurrentDictionarySerializer3.Write(State& state, Int32 fieldNumber, WireType wireType, TCollection values, KeyValuePairSerializer2& pairSerializer) in /_/src/protobuf-net.Core/Serializers/MapSerializer.Concurrent.cs:line 50 at proto_1(State& , GetClosingPricesByDateResponse ) at ProtoBuf.Internal.Serializers.SimpleCompiledSerializer1.ProtoBuf.Serializers.ISerializer.Write(State& state, T value) in //src/protobuf-net/Internal/Serializers/CompiledSerializer.cs:line 117
at ProtoBuf.ProtoWriter.State.WriteAsRoot[T](T value, ISerializer1 serializer) in /_/src/protobuf-net.Core/ProtoWriter.State.WriteMethods.cs:line 555 at ProtoBuf.ProtoWriter.State.SerializeRoot[T](T value, ISerializer1 serializer) in /
/src/protobuf-net.Core/ProtoWriter.State.WriteMethods.cs:line 541
at ProtoBuf.Internal.DynamicStub.ConcreteStub`1.TrySerializeRoot(TypeModel model, State& state, Object value) in //src/protobuf-net.Core/Internal/DynamicStub.cs:line 277
at ProtoBuf.Meta.TypeModel.SerializeRootFallback(State& state, Object value) in /
/src/protobuf-net.Core/Meta/TypeModel.cs:line 273
at ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value) in /_/src/protobuf-net.Core/Meta/TypeModel.cs:line 222
at ServiceStack.ProtoBuf.ProtoBufFormat.Serialize(Object dto, Stream outputStream) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack.ProtoBuf\ProtoBufFormat.cs:line 28
at ServiceStack.ProtoBuf.ProtoBufFormat.Serialize(IRequest requestContext, Object dto, Stream outputStream) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack.ProtoBuf\ProtoBufFormat.cs:line 23
at ServiceStack.Host.ContentTypes.SerializeToBytes(IRequest req, Object response) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack\Host\ContentTypes.cs:line 193
at ServiceStack.CompressResponseAttribute.ExecuteAsync(IRequest req, IResponse res, Object response) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack\CompressResponseAttribute.cs:line 49
at ServiceStack.ServiceStackHost.ApplyResponseFiltersSingleAsync(IRequest req, IResponse res, Object response) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack\ServiceStackHost.Runtime.cs:line 349
at ServiceStack.ServiceStackHost.ApplyResponseFiltersAsync(IRequest req, IResponse res, Object response) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack\ServiceStackHost.Runtime.cs:line 257
at ServiceStack.Host.Handlers.ServiceStackHandlerBase.HandleResponseNext(IRequest httpReq, IResponse httpRes, Object response) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack\Host\Handlers\ServiceStackHandlerBase.cs:line 119
at ServiceStack.Host.Handlers.ServiceStackHandlerBase.HandleResponse(IRequest httpReq, IResponse httpRes, Object response) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack\Host\Handlers\ServiceStackHandlerBase.cs:line 107
at ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest req, IResponse httpRes, String operationName) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack\Host\RestHandler.cs:line 102

I’ve written custom

JsConfig<MyType>.SerializeFn = "..."

logic in the past, but don’t think that concept is relevant here (ie. its not like i have to write some

 ProtoBuf<DateOnly>.Serialize = "..." 

thing. I interpret the logged error as bubbling up from quite deep in the stack.

A bit more googling, I might be out of luck unless you know of a clear workaround:

The ProtoBuf serializer is a 3rd Pary dependency we don’t maintain, any feature requests or issues would need to submitted to the ProtoBuf project.

1 Like