/// <summary> /// Se usan las propiedades con Get y Set y las List,IDictionary,TwoKeysList(deben estar inicializadas desde el contructor) con solo Get además se ignorará las propiedades con el atributo nameof(IgnoreSerialitzer) /// </summary> /// <typeparam name="T">Tipo a generar el serializador</typeparam> /// <param name="MetodoNew">Si el tipo no tiene un New() se debe de dar una forma de generar el tipo</param> /// <returns>Serializador del tipo indicado</returns> static ElementoBinario GetElementoComplejoAuto(Type tipo, GetEmtpyNewObject MetodoNew = null) { IList <PropiedadTipo> propiedades; IList <ElementoBinario> serializadorPartes; GetPartsObjectMethod getParts; GetObjectMethod getObject; if (MetodoNew == null) { MetodoNew = (GetEmtpyNewObject)(() => { return(tipo.GetObj()); }); try { MetodoNew();//asi no se tiene que probar el serializador para saber que no funciona, al obtenero ya se veria el problema } catch (Exception e) { throw e; } } propiedades = GetPropiedadesCompatibles(tipo.GetPropiedadesTipos()); if (propiedades.Count == 0) { throw new Exception($"El tipo {tipo.Name} no es compatible"); } serializadorPartes = GetSerializadorPartes(propiedades); getParts = (obj) => GetPartes(obj, propiedades); getObject = (iPartes) => { object obj = MetodoNew(); SetPartes(obj, propiedades, iPartes); return(obj); }; return(new ElementoComplejoBinarioNullableExt(serializadorPartes, getParts, getObject)); }
/// <summary> /// Se usan las propiedades con Get y Set y las List,IDictionary,TwoKeysList(deben estar inicializadas desde el contructor) con solo Get además se ignorará las propiedades con el atributo nameof(IgnoreSerialitzer) /// </summary> /// <typeparam name="T">Tipo a generar el serializador</typeparam> /// <param name="MetodoNew">Si el tipo no tiene un New() se debe de dar una forma de generar el tipo</param> /// <returns>Serializador del tipo indicado</returns> static ElementoBinario GetSerializador <T>(GetEmtpyNewObject <T> MetodoNew = null) { return(GetElementoComplejoAuto(typeof(T), () => MetodoNew != null ? MetodoNew() : typeof(T).GetObj())); }