public override CustomVector ToInstance(IDictionary <string, object> value, ConverterSettings settings)
            {
                if (settings.TryGetMatchingConverter(typeof(float?), out MemberConverter converter))
                {
                    return(new CustomVector
                    {
                        X = (float?)converter.ConvertBack(value[nameof(CustomVector.X)], typeof(float?), settings),
                        Y = (float?)converter.ConvertBack(value[nameof(CustomVector.Y)], typeof(float?), settings),
                        Z = (float?)converter.ConvertBack(value[nameof(CustomVector.Z)], typeof(float?), settings),
                    });
                }

                return(new CustomVector
                {
                    X = (float?)value[nameof(CustomVector.X)],
                    Y = (float?)value[nameof(CustomVector.Y)],
                    Z = (float?)value[nameof(CustomVector.Z)],
                });
            }
            public override IDictionary <string, object> ToDictionary(CustomVector value, ConverterSettings settings)
            {
                if (settings.TryGetMatchingConverter(typeof(float?), out MemberConverter converter))
                {
                    return(new Dictionary <string, object>(3)
                    {
                        { nameof(CustomVector.X), converter.Convert(999f, settings) },
                        { nameof(CustomVector.Y), converter.Convert(999f, settings) },
                        { nameof(CustomVector.Z), converter.Convert(null, settings) },
                    });
                }

                return(new Dictionary <string, object>(3)
                {
                    { nameof(CustomVector.X), 999f },
                    { nameof(CustomVector.Y), 999f },
                    { nameof(CustomVector.Z), null },
                });
            }