¿Cómo convertir una cadena XML a Objeto en c#? deserializar

Existen varias formas de llenar un objeto por medio de valores incrustados en XML(deserialización) y esta que planteo a continuación es la forma más comprensible de hacerlo.
Teniendo el siguiente texto de xml:


<padre>
  <hijo>
    <id>18</id>
    <valor>CFE7785</valor>
    <entero>1</entero>
  </hijo>
<padre>

Primero tenemos que hacer un conjunto de clases las cuales nos ayudaran a guardar los valores:

    [XmlRoot("padre")]
    public class padre
    {
        [XmlElement("hijo")]
        public List lstHijos{ get; set; }
    }

    public class hijo
    {
        [XmlElement("id")]
        public int id { get; set; }
        [XmlElement("valor")]
        public string valor { get; set; }

        [XmlElement("entero")]
        public int entero { get; set; }

    }

Y ahora el proceso para la magia:


string xml= "<padre> <hijo> <id>18</id> <valor>CFE7785</valor> <entero>1</entero> </hijo> <padre>"

XmlSerializer serializer = new XmlSerializer(typeof(padre));
using (TextReader reader = new StringReader(xml))
{
        //de esta manera se deserializa
        padre result = (padre)serializer.Deserialize(reader);
}

¿Cómo obtener el #UUID (Timbre fiscal) de un xml timbrado en c#? #facturacion

Para obtener el UUID de un xml que ya tengamos timbrado del SAT lo podemos hacer con LINQ muy sencillo como muestro a continuación:

            //sustituir por la ruta de tu xml
            string rutaXML="C:/carpeta1/carpeta2/factura.xml";

            //variables del esquema
            XNamespace cfdi = @"http://www.sat.gob.mx/cfd/3";
            XNamespace tfd = @"http://www.sat.gob.mx/TimbreFiscalDigital";

            //cargamos el xml
            var xdoc = XDocument.Load(rutaXML);

            //Navegamos hasta el elemento que contiene el UUID
            var elt = xdoc.Element(cfdi + "Comprobante")
                          .Element(cfdi + "Complemento")
                          .Element(tfd + "TimbreFiscalDigital");

            //listo obtenemos el UUID
            var uuid = (string)elt.Attribute("UUID");

¿Cómo llenar un SelectList manualmente? C# .Net

Para llenar un SelectList manualmente y poder ser utilizado en nuestro DropDownList (o lo que sea) lo podemos hacer de la siguiente manera:


//creamos una lista tipo SelectListItem
List<SelectListItem> lst = new List<SelectListItem>();

//De la siguiente manera llenamos manualmente,
//Siendo el campo Text lo que ve el usuario y
//el campo Value lo que en realidad vale nuestro valor
lst.Add(new SelectListItem() { Text = "Pato", Value = "1" });
lst.Add(new SelectListItem() { Text = "Perro", Value = "2" });
lst.Add(new SelectListItem() { Text = "Pollo", Value = "3" });
lst.Add(new SelectListItem() { Text = "Gato", Value = "4" });

//Agregamos la lista a nuestro SelectList
SelectList miSL = new SelectList(lst, "Value", "Text");

¿Cómo crear una clase para logs (bitácora) en C#?

Comparto una clase la cual sirve para crear logs de manera fácil y dinámica.
La clase crea un archivo el cual va siendo llenado por cadenas, cada mensaje es guardado en un archivo por día y al mensaje guardado se le anexa la hora en la cual fue creado.

 public class Log
    {
        private string Path = "";
      

        public Log(string Path)
        {
            this.Path = Path;
        }

        public void Add(string sLog)
        {
            CreateDirectory();
            string nombre = GetNameFile();
            string cadena = "";

            cadena += DateTime.Now + " - " + sLog + Environment.NewLine;

            StreamWriter sw = new StreamWriter(Path+"/"+nombre,true);
            sw.Write(cadena);
            sw.Close();

        }

        #region HELPER
        private string GetNameFile()
        {
            string nombre = "";

            nombre = "log_" + DateTime.Now.Year + "_" + DateTime.Now.Month + "_" + DateTime.Now.Day + ".txt";

            return nombre;
        }

        private void CreateDirectory()
        {
            try
            {
                if (!Directory.Exists(Path))
                    Directory.CreateDirectory(Path);

               
            }
            catch (DirectoryNotFoundException ex) {
                throw new Exception(ex.Message);
                
            }
        }
        #endregion
    }

Se utiliza de la siguiente manera:

  string path = HttpContext.Current.Request.MapPath("~");
  Log oLog = new Log(path);
  oLog.Add("Hola mundo");

¿Cómo parsear el formato dd-mm-yy en un DateTime en C# .Net?

Para poder parsear el formato dd-mm-yy en c# .Net, el problema radica que en el año solo tenemos 2 dígitos, pero esto no impide que se pueda realizar de manera fácil, para hacerlo basta con utilizar el método ParseExact de DateTime de la siguiente forma:


DateTime fecha = DateTime.ParseExact("30-01-16", "dd-MM-yy", CultureInfo.InvariantCulture);

¿Cómo ejecutar una consulta SQL directa utilizando entity framework?

Es curioso para mi hacer esta entrada ya que cuando utilizamos un ORM de alguna manera casí nunca es necesario hacer consultas Sql para obtener o modificar datos de la base de datos, pero algunas veces nos es más fácil hacer la consulta ya sea por comodidad o ya sea un caso muy especial. Para no recurrir al famoso SqlCommand y sus derivados Entity Framework nos permite realizar una consulta en crudo de la siguiente manera:


//creamos nuestro objeto context
NuestroEntitie db= new NuestroEntitie();

//ExecuteSQLCommand invoca la consulta capturada
db.Database.ExecuteSqlCommand("update tabla set campo=1 where id>1000 and fecha>getdate()");

¿Cómo enviar un archivo por Ajax de #jquery?

Para enviar un archivo por medio de Ajax en realidad es muy fácil, sobre todo con la función Ajax de jquery, para ello lo demuestro a continuación:
Primero tenemos el código html siguiente, el cual tiene un formulario con un campo de texto y un input file, es importante que el atributo del form enctype sea multipart/form-data, si no es asi no se enviara el archivo.


<form id="frmFormulario" enctype="multipart/form-data">
    <input type="text" name="uncampo">
    <input type="file" name="archivo">
    <input type="submit" value="Enviar">
</form>

Ahora tenemos que seleccionar(selectores de jquery) el formulario para que haga el envió por Ajax (Ver: ¿Cómo hacer una petición Ajax por medio de submit?) y para ello utilizo el siguiente código en javascript el cual esta comentado a detalle:


  $(document).ready(function () {

        //sobreescribimos el metodo submit para que envie la solicitud por ajax
        $("#frmFormulario").submit(function (e) {

            //esto evita que se haga la petición común, es decir evita que se refresque la pagina
            e.preventDefault();

            //ruta la cual recibira nuestro archivo
            url="@Url.Content("~/Archivo/Recibe")"

            //FormData es necesario para el envio de archivo,
            //y de la siguiente manera capturamos todos los elementos del formulario
            var parametros=new FormData($(this)[0])

            //realizamos la petición ajax con la función de jquery
            $.ajax({
                type: "POST",
                url: url,
                data: parametros,
                contentType: false, //importante enviar este parametro en false
                processData: false, //importante enviar este parametro en false
                success: function (data) {

                   alert("Se capturo el archivo con éxito")
                },
                error: function (r) {

                    alert("Error del servidor");
                }
            });

        })

    })

Y este es el trabajo que se hace en el front-end, ahora solo queda hacer el método en el back-end el cual capture el archivo y lo guarde o realice la acción deseada con el fichero; por ejemplo en Mvc.Net seria de la siguiente manera:

//controlador de mvc.net
public class Archivo : Controller{
  public ActionResult Recibe(string uncampo, HttpPostedFileBase archivo)
        {

          //aqui va el codigo que deseemos para manipular el archivo

       }
}

Y así de fácil se envía un archivo por medio de Ajax. Dudas o comentarios pueden hacérmelos llegar y yo les respondo en breve.

¿Cómo concatenar un TimeSpan a un DateTime en c# .Net?

Por alguna circunstancia tenemos un TimeSpan y un DateTime y requerimos concatenarlos, es decir tenemos un TimeStam con la hora “13:30:00” y tenemos un DateTime con “2016-01-01 00:00:00”. Para ello tenemos que hacerlo de la siguiente forma:


DateTime fecha = DateTime.Parse("2016-01-01");
TimeSpan tiempo = TimeSpan.Parse("13:30:00");
DateTime fechaConcatenada = fecha.Value.Add(tiempo);

//fechaConcatenada = 2016-01-01 13:30:00

¿Cómo convertir una imagen de formato RGB a CMYK en c# .Net?

Hace poco termine unos proyectos en los cuales debía manejar la manipulación de imágenes enormes, y me encontré con mucha problemática y poca información, pero gracias a muchas desveladas conseguí el objetivo.
Uno de mis quebraderos de cabeza fue el transformar una imagen de formato RGB a formato CMYK, y hacer de una manera que sea gratuita (ya que encontré algunas empresas que vendían dlls a precios descabellados).

Si van a manipular imágenes enormes, ahórrense martirios y horas de trabajo demás, NO UTILICEN System.Drawing, la misma documentación de Microsoft no recomienda que lo utilices para proyectos con manipulación de imágenes grandes.

Ahora que ya resolví este problema publico este post que a más de uno le servirá, primero vamos a tener que instalar un dll que es gratuito (prácticamente es un wrapper hecho en c++), este magnífico dll se llama Magick.Net. Solo destacare que hay varios dlls con este nombre, lo que los diferencia es que tienen un numero al final, entre sea más elevado el número, se puede trabajar con imágenes mayores, descarguen según les convenga (si utilizaran imágenes enormes les recomiendo que bajen Q16 de 64 bits).
Si no sabes cómo instalar un dll por medio de nuget da clic aquí y te explico con un video como hacerlo.
Una vez que instalamos Magick.Net (otro problema que me encontré es la falta de ejemplos para .Net) vamos a crear la imagen CMYK. Para ellos lo haremos de la siguiente manera:


using(MagickImage image = new MagickImage("miimagenRGB.jpg")){
                        //lineas magicas que convierten a CMYK
                        image.AddProfile(ColorProfile.SRGB);
                        image.AddProfile(ColorProfile.USWebCoatedSWOP);

                        //y si guardamos nuestra imagen cmyk
                        image.Write("imagenCMYK.jpg");
}

Así de fácil se resuelve un problema en el cual estuve investigando casi por un mes (sorpresas de la vida del programador).
Más adelante iré agregando más artículos sobre esta potente librería.

Código gratis, sistema para gimnasio en C# .Net – Gym Hdeleon

Deseas más funcionalidad, ya salio la nueva versión de este sistema para administrar gimnasios, incluye registro con huella, administración de clases, Soporte para puerta eléctrica, membresias semanales,  indice de masa coorporal y más, puedes ver la información aquí.

La descripción del gimnasio ya compilado la hago en el siguiente video:

Si deseas este software en ingles da clic aquí.

No damos soporte de esta versión, ya que es la versión gratuita.

Existe una versión premium con costo con muchísimas más funcionalidades, puedes verla dando clic aquí.

Descargar sistema y código para gimnasio 1.0 GRATIS

Versión 1.0 en ingles, puedes acceder a la versión en ingles la cual también es gratuita (incluye código fuente).

IR A TUTORIAL PARA INSTALAR EL SOFTWARE (PARA PERSONAS QUE NO SABEN DE PROGRAMACIÓN)

Cualquier duda no duden en hacérmela en la parte de comentarios.