• Skip to content
  • Skip to primary sidebar
  • Skip to footer

R Andrade

Blog do Paulo Roberto - Desenvolvimento e arquitetura

Serializando dados com plug-ins no Xamarin.Forms

14 de Março de 2018 by Paulo Roberto Ramos de Andrade Leave a Comment

Olá pessoal! Tudo bem? Nos últimos dias, estivemos estudando o uso do PCLExt.FileStorage para salvar e gerenciar arquivos e pastas locais em apps criados com Xamarin.Forms. Só que em todos os casos já explicados, os arquivos criados foram arquivos simples, de texto. Só que o PCLExt.FileStorage também pode ser usado para salvar objetos serializados como uma sequência de bytes. Vamos aprender como.

Como sempre, fique à vontade para baixar o código fonte deste artigo para estudos.

Em primeiro lugar, a classe cujos objetos serão serializados precisam ter o atributo [Serializable], como o exemplo abaixo. Isto não é nenhum recurso específico do Xamarin.Forms, é do .NET mesmo.

[Serializable]
public class Model
{
    public string Propriedade1 { get; set; }
    public string Propriedade2 { get; set; }
}

A interface do app também é simples, com dois campos de texto Entry, que serão usados para preencher as propriedades do objeto do tipo Model que será serializado. Logo abaixo, dois botões para salvar e carregar as informações serializadas.

<Grid Padding="0,20,0,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <Entry x:Name="Label1" Grid.Row="0" Placeholder="Digite aqui a propriedade 1" />
    <Entry x:Name="Label2" Grid.Row="1" Placeholder="Digite aqui a propriedade 2" />
    <Button Text="Salvar" Grid.Row="3" Clicked="ButtonSave_OnClicked"/>
    <Button Text="Carregar" Grid.Row="4" Clicked="ButtonLoad_OnClicked" />

</Grid>

No Code Behind, criamos duas propriedades. PastaRaiz, do tipo IFolder, que representa a pasta local de arquivos do app, e Arquivo, do tipo IFile, que representa o arquivo que vamos salvar e carregar. No construtor da página, instanciamos PastaRaiz como LocalRootFolder e já criamos o Arquivo, com um nome aleatório.

public IFolder PastaRaiz { get; }
public IFile Arquivo { get; }

public MainPage()
{
    InitializeComponent();
    PastaRaiz = new LocalRootFolder();
    Arquivo = PastaRaiz.CreateFile(Guid.NewGuid().ToString(), CreationCollisionOption.ReplaceExisting);
}

O método ButtonSave_OnClicked, chamado quando queremos salvar um novo Model, primeiramente cria o objeto com as informações textuais que digitamos. Logo abaixo, criamos um BinaryFormatter e um MemoryStream para que o objeto seja serializado em memória. Ao final, usamos o método WriteAllBytesAsync do Arquivo para escrever a versão serializada do Model recém criado – um array de bytes.

private async void ButtonSave_OnClicked(object sender, EventArgs e)
{
    var model = new Model
    {
        Propriedade1 = Label1.Text,
        Propriedade2 = Label2.Text
    };

    var bf = new BinaryFormatter();
    var ms = new MemoryStream();
    bf.Serialize(ms, model);

    await Arquivo.WriteAllBytesAsync(ms.ToArray());
    Label1.Text = string.Empty;
    Label2.Text = string.Empty;
}

Já o método ButtonLoad_OnClicked, chamado quando queremos carregar o arquivo, começa carregando o objeto serializado através do método ReadAllBytesAsync do Arquivo. A partir daí criamos um MemoryStream e um BinaryFormatter e os usamos para desserializar o array de bytes carregados do arquivo e transformá-lo novamente num Model, permitindo ler as propriedades digitadas inicialmente.

private async void ButtonLoad_OnClicked(object sender, EventArgs e)
{
    var conteudo = await Arquivo.ReadAllBytesAsync();

    var memStream = new MemoryStream();
    var binForm = new BinaryFormatter();
    memStream.Write(conteudo, 0, conteudo.Length);
    memStream.Seek(0, SeekOrigin.Begin);

    var model = (Model) binForm.Deserialize(memStream);

    Label1.Text = model.Propriedade1;
    Label2.Text = model.Propriedade2;
}

Veja o resultado:


Como você pode perceber, não há nenhuma diferença prática entre salvar arquivos de texto e salvar informações serializadas com o PCLExt.FileStorage. E vale destacar também que a lógica de serialização e desserialização de objetos é do próprio .NET, e nem precisamos fazer adaptações para o código funcionar em apps Xamarin.Forms. Até a próxima!

[]’s
Paulo Roberto

Filed Under: C#, Mobile, Todas as postagens, Xamarin Tagged With: .net, c#, injeção de dependência do xamarin.forms, mobile, persistencia de arquivos, plug-ins xamarin.forms, visual studio, xamarin, xamarin.android, xamarin.forms, xamarin.ios

Publicidade

Primary Sidebar

Quem sou eu

Meu nome é Paulo Roberto e tenho 32 anos, com 12 anos de experiência na área. Sou desenvolvedor, autodidata, iniciante nas artes da arquitetura de softwares, eterno interessado em aprender mais técnicas e tecnologias e também interessado em documentar e repassar o pouco que já sei.

Acompanhe o blog nas redes sociais

  • Email
  • Facebook
  • Github
  • Linkedin
  • Twitter

Publicidade

O que foi mais lido no último mês

  • Tokens de acesso: Primeiro passo para proteger WebApis
  • Depurando aplicações Xamarin.Forms diretamente um smartphone com Android
  • CORS: O que é isso e como ativá-lo numa Web API
  • Convertendo tabelas HTML em arquivos Excel no Front End

Categorias

Arquitetura de Sistemas ASP.NET MVC ASP.NET Web Api Autenticação e Autorização C# Cors Dicas e Truques Entity Framework JavaScript Mobile N Camadas OWIN Pessoal Segurança Sem categoria Sites que ajudam Softwares Todas as postagens Unit Testing Virtualização Xamarin Xaml

Footer

Pesquisar

Arquivo do blog

Copyright © 2018 · Magazine Pro on Genesis Framework · WordPress · Log in