private static bool IsStandardMessage(Type type, [NotNullWhen(true)] out MessageDescriptor?messageDescriptor) { if (!typeof(IMessage).IsAssignableFrom(type)) { messageDescriptor = null; return(false); } messageDescriptor = JsonConverterHelper.GetMessageDescriptor(type); if (messageDescriptor == null) { return(false); } // Wrappers and well known types are handled by converters. if (ServiceDescriptorHelpers.IsWrapperType(messageDescriptor)) { return(false); } if (JsonConverterHelper.WellKnownTypeNames.ContainsKey(messageDescriptor.FullName)) { return(false); } return(true); }
public override JsonConverter CreateConverter( Type typeToConvert, JsonSerializerOptions options) { var descriptor = JsonConverterHelper.GetMessageDescriptor(typeToConvert) !; var converterType = JsonConverterHelper.WellKnownTypeNames[descriptor.FullName]; var converter = (JsonConverter)Activator.CreateInstance( converterType.MakeGenericType(new Type[] { typeToConvert }), BindingFlags.Instance | BindingFlags.Public, binder: null, args: new object[] { _context }, culture: null) !; return(converter); }
public override bool CanConvert(Type typeToConvert) { if (!typeof(IMessage).IsAssignableFrom(typeToConvert)) { return(false); } var descriptor = JsonConverterHelper.GetMessageDescriptor(typeToConvert); if (descriptor == null) { return(false); } return(ServiceDescriptorHelpers.IsWrapperType(descriptor)); }
public override bool CanConvert(Type typeToConvert) { if (!typeof(IMessage).IsAssignableFrom(typeToConvert)) { return(false); } var descriptor = JsonConverterHelper.GetMessageDescriptor(typeToConvert); if (descriptor == null) { return(false); } return(JsonConverterHelper.WellKnownTypeNames.ContainsKey(descriptor.FullName)); }
private static EnumDescriptor?ResolveEnumDescriptor(Type typeToConvert) { var containingType = typeToConvert?.DeclaringType?.DeclaringType; if (containingType != null) { var messageDescriptor = JsonConverterHelper.GetMessageDescriptor(containingType); if (messageDescriptor != null) { for (var i = 0; i < messageDescriptor.EnumTypes.Count; i++) { if (messageDescriptor.EnumTypes[i].ClrType == typeToConvert) { return(messageDescriptor.EnumTypes[i]); } } } } return(null); }