Ejemplo n.º 1
0
        private IEnumerable <T> ReadData <T>(IDataReader reader)
        {
            if (fn == null)
            {
                Stopwatch st = new Stopwatch();
                st.Start();
                fn = GetDeserializer <T> .Deserialize(reader);

                st.Stop();
                Console.WriteLine(" 初始化反序列化函数 。。。,用时:{0}ms", st.Elapsed.TotalMilliseconds);
            }
            Func <IDataReader, T> projector = (Func <IDataReader, T>)fn;

            try
            {
                while (reader.Read())
                {
                    yield return(projector(reader));
                }
            }
            finally
            {
                reader.Dispose();
            }
        }
Ejemplo n.º 2
0
        public static void InitializeAllFieldsSequentially <T>
            (T target, Stream serializedValues, string from, string to)
        {
            foreach (var field in enumerateInstanceFieldsSequentially(typeof(T), from, to))
            {
                setValue(field);
            }

            return;

            void setValue(FieldInfo fi)
            {
                var    fieldType = fi.FieldType;
                object value     = null;

                if (fieldType.IsPrimitive)
                {
                    value = GetDeserializer(fieldType)(serializedValues);
                    fi.SetValue(target, value);
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// De-serializes an anonymous object constant.
        /// </summary>
        /// <param name="element">The element from which to de-serialize the constant.</param>
        /// <param name="type">The type.</param>
        /// <returns>The de-serialized anonymous object constant.</returns>
        static object DeserializeAnonymous(
            XElement element,
            Type type)
        {
            if (element == null)
            {
                throw new ArgumentNullException(nameof(element));
            }

            if (!element.Elements(XNames.Elements.Property).Any())
            {
                return(null);
            }

            type = GetType(element);

            var constructor           = type.GetConstructors()[0];
            var constructorParameters = constructor.GetParameters();
            var parameters            = new object[constructorParameters.Length];

            for (var i = 0; i < constructorParameters.Length; i++)
            {
                var propElement = element
                                  .Elements(XNames.Elements.Property)
                                  .Where(e => e.Attribute(XNames.Attributes.Name)
                                         .Value == constructorParameters[i].Name)
                                  .First()
                                  .Elements()
                                  .FirstOrDefault();

                if (propElement != null)
                {
                    parameters[i] = GetDeserializer(propElement)(propElement, GetDataType(propElement));
                }
            }

            return(constructor.Invoke(parameters));
        }
Ejemplo n.º 4
0
 private IEnumerable <T> NewReadData <T>(IDataReader reader)
 {
     try
     {
         while (reader.Read())
         {
             yield return(GetDeserializer <T> .ReflectDeserialize(reader));
         }
     }
     finally
     {
         reader.Dispose();
     }
 }