Orleans Serializer Throws when using a record type as a type argument in a ImmutableSortedDictionary<,>
- Dominant language
- C#
- Stars
- 10.9k
- Forks
- 2.1k
- Avg merge
- 14h 42m
- Merged PRs (30d)
- 354
Description
Hello, and thank you for all the amazing work on Orleans.
I have noticed that if you specify a record type as a type argument in a ImmutableSortedDictionary<,>, you get an exception.
```
Orleans.Serialization.CodecNotFoundException: Could not find a codec for type System.Collections.Generic.GenericEqualityComparer`1[TestRecord]
```
## Stacktrace
```
Unhandled exception. Orleans.Serialization.CodecNotFoundException: Could not find a codec for type System.Collections.Generic.GenericEqualityComparer`1[TestRecord].
at Orleans.Serialization.Serializers.CodecProvider.ThrowCodecNotFound(Type fieldType) in /_/src/Orleans.Serialization/Serializers/CodecProvider.cs:line 655
at Orleans.Serialization.Serializers.CodecProvider.GetCodec(Type fieldType) in /_/src/Orleans.Serialization/Serializers/CodecProvider.cs:line 161
at Orleans.Serialization.Serializers.AbstractTypeSerializer.WriteField[TBufferWriter](Writer`1& writer, UInt32 fieldIdDelta, Type expectedType, Object value) in /_/src/Orleans.Serialization/Serializers/AbstractTypeSerializer.cs:line 52
at Orleans.Serialization.Serializers.AbstractTypeSerializerWrapper`1.WriteField[TBufferWriter](Writer`1& writer, UInt32 fieldIdDelta, Type expectedType, TField value) in /_/src/Orleans.Serialization/Serializers/AbstractTypeSerializer.cs:line 33
at Orleans.Serialization.ServiceCollectionExtensions.ValueSerializerHolder`1.Serialize[TBufferWriter](Writer`1& writer, TField& value) in /_/src/Orleans.Serialization/Hosting/ServiceCollectionExtensions.cs:line 180
at Orleans.Serialization.Codecs.GeneralizedReferenceTypeSurrogateCodec`2.WriteField[TBufferWriter](Writer`1& writer, UInt32 fieldIdDelta, Type expectedType, TField value) in /_/src/Orleans.Serialization/Codecs/GeneralizedReferenceTypeSurrogateCodec.cs:line 57
at Orleans.Serialization.Serializer.SerializeToArray[T](T value) in /_/src/Orleans.Serialization/Serializer.cs:line 56
at Program.$(String[] args) in D:\junk\orleans-immutablesorteddictionary-bug\Program.cs:line 22
```
## Repro
```csharp
// See https://aka.ms/new-console-template for more information
using System.Collections.Immutable;
using Orleans.Serialization.Codecs;
using Orleans.Serialization;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddSerializer();
var provider = services.BuildServiceProvider();
var serializer = provider.GetRequiredService();
serializer.SerializeToArray(ImmutableDictionary.Empty);//does not throw
serializer.SerializeToArray(ImmutableSortedDictionary.Empty);//throws 💥
[GenerateSerializer]
public record TestRecord;
```
Contributor guide
Assessment
This issue has not been assessed yet.