Jericho / ZoomNet

.NET client library for the Zoom.us REST API v2
MIT License
69 stars 45 forks source link

MeetingSettings.CustomKeys JsonConverter attribute cause InvalidOperationException in .NET 8.0 #327

Closed Bob-HL closed 7 months ago

Bob-HL commented 7 months ago

Got error when creating a meeting. Error details:

System.InvalidOperationException: The converter specified on 'ZoomNet.Models.MeetingSettings.CustomKeys' does not derive from JsonConverter or have a public parameterless constructor. at
 System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializationConverterOnAttributeInvalid(Type classType, MemberInfo memberInfo) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.GetConverterFromAttribute(JsonConverterAttribute converterAttribute, Type typeToConvert, MemberInfo memberInfo, JsonSerializerOptions options) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.GetCustomConverterForMember(Type typeToConvert, MemberInfo memberInfo, JsonSerializerOptions options) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.CreatePropertyInfo(JsonTypeInfo typeInfo, Type typeToConvert, MemberInfo memberInfo, JsonSerializerOptions options, Boolean shouldCheckForRequiredKeyword, Boolean hasJsonIncludeAttribute) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.AddMember(JsonTypeInfo typeInfo, Type typeToConvert, MemberInfo memberInfo, Boolean shouldCheckForRequiredKeyword, Boolean hasJsonIncludeAttribute, PropertyHierarchyResolutionState& state) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.AddMembersDeclaredBySuperType(JsonTypeInfo typeInfo, Type currentType, Boolean constructorHasSetsRequiredMembersAttribute, PropertyHierarchyResolutionState& state) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.PopulateProperties(JsonTypeInfo typeInfo) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.CreateTypeInfoCore(Type type, JsonConverter converter, JsonSerializerOptions options) at
 System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.CreateJsonTypeInfo(Type type, JsonSerializerOptions options) at System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver.GetTypeInfo(Type type, JsonSerializerOptions options) at
 System.Text.Json.JsonSerializerOptions.GetTypeInfoNoCaching(Type type) at
 System.Text.Json.JsonSerializerOptions.CachingContext.CreateCacheEntry(Type type, CachingContext context)
 --- End of stack trace from previous location --- at
 System.Text.Json.JsonSerializerOptions.CachingContext.CacheEntry.GetResult() at
 System.Text.Json.JsonSerializerOptions.CachingContext.GetOrAddTypeInfo(Type type, Boolean fallBackToNearestAncestorType) at
 System.Text.Json.JsonSerializerOptions.GetTypeInfoInternal(Type type, Boolean ensureConfigured, Nullable`1 ensureNotNull, Boolean resolveIfMutable, Boolean fallBackToNearestAncestorType) at
 System.Text.Json.JsonSerializerOptions.GetTypeInfo(Type type) at
 System.Text.Json.Nodes.JsonValue.Create[T](T value, Nullable`1 options) at
 ZoomNet.Internal.Add[T](JsonObject jsonObject, String propertyName, T value) at
 ZoomNet.Resources.Meetings.CreateScheduledMeetingAsync(String userId, String topic, String agenda, DateTime start, Int32 duration, Nullable`1 timeZone, String password, MeetingSettings settings, IDictionary`2 trackingFields, String templateId, CancellationToken cancellationToken)
Jericho commented 7 months ago

Thanks for reporting this issue. It's caused by an old "using" statement that should have been removed when we upgraded to the System.Text.Json serializing library almost two years ago. It's interesting that this is not a problem under any of the other versions of the .NET framework that we support, only .NET 8.

Anyway, I'll get this fixed and publish an update as soon as I can.

Jericho commented 7 months ago

Resolved by commit ca7467d18af57245fbdd68e2774ddb6cab771cf5

Jericho commented 7 months ago

:tada: This issue has been resolved in version 0.70.0 :tada:

The release is available on:

Your GitReleaseManager bot :package::rocket: