コード例 #1
0
        /// <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));
        }
コード例 #2
0
 /// <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()));
 }