protected string Decode(IEncodableDataType dt, string value)
 {
     byte[] data = DecodeData(dt, value);
     if (data != null)
     {
         // Default to the current encoding
         IEncodingStack encodingStack = GetService<IEncodingStack>();
         return encodingStack.Current.GetString(data);
     }
     return null;
 }
        protected string Encode(IEncodableDataType dt, string value)
        {
            if (value != null)
            {
                if (dt == null || dt.Encoding == null)
                    return value;

                // Return the value in the current encoding
                IEncodingStack encodingStack = GetService<IEncodingStack>();
                return Encode(dt, encodingStack.Current.GetBytes(value));
            }
            return null;
        }
        protected byte[] DecodeData(IEncodableDataType dt, string value)
        {
            if (value != null)
            {
                if (dt == null || dt.Encoding == null)
                {
                    // Default to the current encoding
                    IEncodingStack encodingStack = GetService<IEncodingStack>();
                    return encodingStack.Current.GetBytes(value);
                }

                IEncodingProvider encodingProvider = GetService<IEncodingProvider>();
                if (encodingProvider != null)
                    return encodingProvider.DecodeData(dt.Encoding, value);
            }
            return null;
        }
        protected string Encode(IEncodableDataType dt, byte[] data)
        {
            if (data != null)
            {
                if (dt == null || dt.Encoding == null)
                {
                    // Default to the current encoding
                    IEncodingStack encodingStack = GetService<IEncodingStack>();
                    return encodingStack.Current.GetString(data);
                }

                IEncodingProvider encodingProvider = GetService<IEncodingProvider>();
                if (encodingProvider != null)
                    return encodingProvider.Encode(dt.Encoding, data);
            }
            return null;
        }
        /// <summary>
        ///     Encodes the specified date time.
        /// </summary>
        /// <param name="dt">The date time.</param>
        /// <param name="data">The data.</param>
        /// <returns></returns>
        protected string Encode(IEncodableDataType dt, byte[] data)
        {
            if (data != null)
            {
                if (dt == null || dt.Encoding == null)
                {
                    // Default to the current encoding
                    var encodingStack = GetService <IEncodingStack>( );
                    return(encodingStack.Current.GetString(data));
                }

                var encodingProvider = GetService <IEncodingProvider>( );
                if (encodingProvider != null)
                {
                    return(encodingProvider.Encode(dt.Encoding, data));
                }
            }
            return(null);
        }
        /// <summary>
        ///     Decodes the data.
        /// </summary>
        /// <param name="dt">The date time.</param>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        protected byte[] DecodeData(IEncodableDataType dt, string value)
        {
            if (value != null)
            {
                if (dt == null || dt.Encoding == null)
                {
                    // Default to the current encoding
                    var encodingStack = GetService <IEncodingStack>( );
                    return(encodingStack.Current.GetBytes(value));
                }

                var encodingProvider = GetService <IEncodingProvider>( );
                if (encodingProvider != null)
                {
                    return(encodingProvider.DecodeData(dt.Encoding, value));
                }
            }
            return(null);
        }
        protected string Decode(IEncodableDataType dt, string value)
        {
            if (dt?.Encoding == null)
            {
                return(value);
            }

            var data = DecodeData(dt, value);

            if (data == null)
            {
                return(null);
            }

            // Default to the current encoding
            var encodingStack = GetService <EncodingStack>();

            return(encodingStack.Current.GetString(data));
        }