Example #1
0
    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);
    }
Example #3
0
    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));
    }
Example #5
0
    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);
    }