quinta-feira, 18 de dezembro de 2014

Serializando entidades do LINQ

Fala galera,

Após um longo período de inatividade vou compartilhar um código para serialização/deserialização de objetos do LINQ.

No meu caso, era preciso armazenar uma lista de objetos do LINQ em sessão. Porém, o sessionstate mode foi alterado de in-proc para sqlserver.

Com isso, passou a ocorrer erro pois o framework informava que a minha entidade no LINQ não era serializável. A solução foi serializar os objetos utilizando a classe "DataContractJsonSerializer".

Seguem os métodos para serialização e deserialização dos objetos:

public static MemoryStream SerializeObject(object obj)
{
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(stream1, obj);
return stream1;
}

public static object DeserializeObject(object obj, MemoryStream stream)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
stream.Position = 0;
return ser.ReadObject(stream);
}

Abraços e até a próxima!!

quinta-feira, 5 de junho de 2014

Copiando um diretório recursivamente

Fala galera,

Quem já precisou criar uma cópia de um diretório já deve ter notado que a função Copy que existe na classe System.IO.File não está presente na classe System.IO.Directory.

Segue então um código para quem precisa fazer cópia de um diretório e toda sua estrutura (arquivos e subdiretórios):

public void copyFolder(string oldFolder, string newFolder)
{
    if (!Directory.Exists(newFolder))
        Directory.CreateDirectory(newFolder);

    string[] files = Directory.GetFiles(oldFolder);
    foreach (string file in files)
   {
       string name = Path.GetFileName(file);
       string dest = Path.Combine(newFolder, name);
       File.Copy(file, dest);
   }
   string[] folders = Directory.GetDirectories(oldFolder);
   foreach (string folder in folders)
  {
     string name = Path.GetFileName(folder);
     string dest = Path.Combine(newFolder, name);
     copyFolder(folder, dest);
  }
}


Um abraço e até a próxima!!

quarta-feira, 12 de fevereiro de 2014

Executando métodos em novas Threads com passagem de parâmetros

Fala galera,

Segue um código rápido para quem precisa executar métodos em threads separadas da thread principal com passagem de parâmetros:


public void meuMetodo(string param1, string param2)
{
}
Thread t = new Thread(()=>meuMetodo("abc", "def"));
t.Start();

Um abraço e até a próxima!!

quinta-feira, 6 de fevereiro de 2014

Timeout ao utilizar HttpWebRequest com protocolo HTTPS

Fala galera,

Segue mais um código pra contornar um problema comum no .net para quem precisa trabalhar com WebRequests acessando uma url através do protocolo HTTPS.

O erro que costuma ocorrer é uma mensagem de "Timeout exceeded" (Tempo limite excedido) e a solução é bastante simples. Basta adicionar as 2 linhas abaixo:

//Esta linha fará com que o certificado não seja validado (Útil em casos onde há problemas com o ceritificado)
System.Net.ServicePointManager.CheckCertificateRevocationList = false;

//Esta linha fará com que o tipo de protocolo de segurança a ser utilizado seja o SSL3 ao invés do TLS (que parece ser o protocolo padrão)
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;


Um abraço e até a próxima!!