/// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public static T Deserialize <T>(string text) where T : class, new()
        {
            if (string.IsNullOrEmpty(text))
            {
                return(default(T));
            }

            var stringValues = text.Split(';').SkipLast(1).ToList();
            var props        = typeof(T).GetProperties().ToList();
            var obj          = new T();

            for (int i = 0; i < stringValues.Count(); i++)
            {
                var stringValue = stringValues[i];
                if (props.Count == i)
                {
                    break;
                }

                var prop      = props[i];
                var converter = TelegramBotCallbackDataConverterFactory.GetConverter(prop.PropertyType);

                var propValue = converter.Deserialize(prop.PropertyType, stringValue);
                prop.SetValue(obj, propValue);
            }

            return(obj);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="prop"></param>
        /// <param name="obj"></param>
        /// <param name="builder"></param>
        private static void SerializePropertyValue(PropertyInfo prop, object obj, TelegramBotCallbackDataStringBuilder builder)
        {
            var converter = TelegramBotCallbackDataConverterFactory.GetConverter(prop.PropertyType);

            converter.Serialize(builder, prop.GetValue(obj));
        }