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(); } }
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); } } }
/// <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)); }
private IEnumerable <T> NewReadData <T>(IDataReader reader) { try { while (reader.Read()) { yield return(GetDeserializer <T> .ReflectDeserialize(reader)); } } finally { reader.Dispose(); } }