/// <summary>
        /// Adds an entity to the configuration for this serializer context.
        /// </summary>
        /// <typeparam name="T">Type of the entity to add to the context.</typeparam>
        /// <returns>Configuration object for the entity type <typeparamref name="T"/>.</returns>
        public XmlComplexTypeConfiguration <T> Entity <T>()
            where T : class
        {
            var entityConfiguration = new XmlComplexTypeConfiguration <T>(this._contextType);

            this.Entities.Add(entityConfiguration);

            return(entityConfiguration);
        }
        public static XmlArrayConfiguration HasArray <T, TArrayItem>(this XmlComplexTypeConfiguration <T> configuration, Expression <Func <T, IEnumerable <TArrayItem> > > property)
            where T : class
        {
            var propertyInfo = ReflectionHelpers.GetPropertyInfo(property);
            var arrayConfig  = new XmlArrayConfiguration(propertyInfo);

            configuration.PropertyConfigurations.Add(arrayConfig);

            return(arrayConfig);
        }
        public static XmlAttributeConfiguration HasAttribute <T>(this XmlComplexTypeConfiguration <T> configuration, Expression <Func <T, byte> > property)
            where T : class
        {
            var propertyInfo    = ReflectionHelpers.GetPropertyInfo(property);
            var attributeConfig = new XmlAttributeConfiguration(propertyInfo);

            configuration.PropertyConfigurations.Add(attributeConfig);

            return(attributeConfig);
        }
        public static XmlElementConfiguration HasElement <T, TElement>(this XmlComplexTypeConfiguration <T> configuration, Expression <Func <T, TElement> > property)
            where T : class
        {
            var propertyInfo  = ReflectionHelpers.GetPropertyInfo(property);
            var elementConfig = new XmlElementConfiguration(propertyInfo);

            configuration.PropertyConfigurations.Add(elementConfig);

            return(elementConfig);
        }
        public static XmlAttributeConfiguration HasAttribute <T>(this XmlComplexTypeConfiguration <T> configuration, Expression <Func <T, Nullable <byte> > > property)
            where T : class
        {
            var propertyInfo      = ReflectionHelpers.GetPropertyInfo(property);
            var convertToString   = ReflectionHelpers.GetDelegateMethodInfo <Nullable <byte>, string>(StringConversions.ConvertByteToString);
            var convertFromString = ReflectionHelpers.GetDelegateMethodInfo <string, Nullable <byte> >(StringConversions.ConvertStringToByte);
            var attributeConfig   = new XmlAttributeConfiguration(propertyInfo, typeof(string), convertFromString, convertToString);

            configuration.PropertyConfigurations.Add(attributeConfig);

            return(attributeConfig);
        }