-
Type: Bug
-
Resolution: Gone away
-
Priority: Unknown
-
None
-
Affects Version/s: 2.19.0
-
Component/s: Serialization
-
None
Prerequisite
I have the following document:
{ "State": { "Date": null, "Time": null, "Filters": { "_t": "System.Collections.Generic.List`1[[JobManager.Common.TimeFilter, JobManager.Common]]", "_v": [ { "Type": 2, "Values": [ 6 ], "Mode": 1 } ] } } }
*irrelevant parts omitted
Mapped to the following c# Type
public class ObjectDescriptor { public string? Id { get; set; } public string? TypeName { get; set; } public ObjectState? State { get; set; } }
where ObjectState
public class ObjectState : Dictionary<string, object?>
The actual instance of the dictionary contains a key called Filters ,
with a value of type List<TimeFilter>
The class TimeFilter
public class TimeFilter { public TimeFilterType Type { get; set; } //Enum public IList<int>? Values { get; set; } public TimeFilterMode Mode { get; set; } //Enum }
Problem
The method GetActualType in class TypeNameDiscriminator calls {{TryParseGenericTypeName }}passing the following typeName:
System.Collections.Generic.List`1[[JobManager.Common.TimeFilter, JobManager.Common]]
At first call, returns as typeArgumentNames the following string:
[JobManager.Common.TimeFilter, JobManager.Common]
The subsequential recursive call to GetActualType with that argument as typeName,
results in a wrong match in TryParseGenericTypeName (wrongly parsed as generic),
returning an empty string ("") in typeArgumentNames
The empty string causes an exception when is called:
Type.GetType(typeName);
The exception is:
String cannot have zero length
Framework: .NET 7.0.200-preview.22628.1
MongoDB.Driver: 2.19.0