// Rodolfo Fadino

/* LIFE RUNS ON CODE */

Um dos melhores formatos para transmitir dados na web é o Json (JavaScript Object Notation),  já que é nativo do JavaScript e possui menor overhead de separadores que em um XML por exemplo, alem disso, é facilmente tratado por funções JS.

Cada vez mais a maioria de projetos utiliza JSON em suas API’s, integrações ou em outras comunicações.

A idéia deste post é demonstrar algumas facilidades e maneiras de trabalhar com JSON utilizando dynamic e C#.

Para isso precisaremos instalar e referenciar a namespace do System.Json, que pode ser incluida através de Nuget:

(Install-Package System.Json)

 

Criando JSON

Com o dynamic (http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx) é possivel extender a classe JsonObject (http://msdn.microsoft.com/en-us/library/system.json.jsonobject(v=vs.110).aspx) para criarmos com muita facilidade nosso objetos JSON.

Ex:

dynamic usuario = new JsonObject();
usuario.nome = "Rodolfo";
usuario.sexo = "m";
usuario.idade = 22;

dynamic certificacoes = new JsonArray();

dynamic certificacao1 = new JsonObject();
certificacao1.titulo = "MCPD";
certificacao1.id = 1;

dynamic certificacao2 = new JsonObject();
certificacao2.titulo = "MCTS";
certificacao2.id = 2;

dynamic certificacao3 = new JsonObject();
certificacao3.titulo = "MCP";
certificacao3.id = 3;

certificacoes.Add(certificacao1);
certificacoes.Add(certificacao2);
certificacoes.Add(certificacao3);

usuario.certificacoes = certificacoes;

Console.WriteLine(usuario.ToString());

Terá criado a seguinte string

{"nome":"Rodolfo","sexo":"m","idade":22,"certificacoes":
[{"titulo":"MCPD","id":1},{"titulo":"MCTS","id":2},{"titulo":"MCP","id":3}]}

 

Lendo strings com JSON

Outra função fundamental é converter strings de JSON em objetos que podem ser trabalhados, para isso, neste exemplo eu utilizarei o dynamic e o JsonValue (http://msdn.microsoft.com/en-us/library/system.json.jsonvalue(v=vs.110).aspx)

Ex:

var jsonString = "{\"nome\":\"Rodolfo Fadino\",\"idade\":22, \"sexo\":\"M\"}";
dynamic jsonTratado = JsonValue.Parse(jsonString);

string Nome = jsonTratado.nome;
char Sexo = jsonTratado.sexo;
int idade = jsonTratado.idade;

 

Abaixo seguem os link’s da MSDN

http://msdn.microsoft.com/en-us/library/system.json(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/system.dynamic.aspx

 

Bom espero que este post tenha sido util,

estou a disposição para dúvidas, críticas e sugestões

 

abs

Rodolfo

C#

O operador ?: pode ser ilustrado da seguinte maneira

condicao ? primeira_expressao : segunda_expressao;

A condição é avaliada como Verdadeira ou Falsa, no caso da condição ser Verdadeira a primeira_expressao é avaliada e será retornada, no caso da condição ser Falsa a segunda_expressao é avaliada e será retornada como resultado.

A documentação é clara quando as necessidade das duas expressões retornarem o mesmo tipo. Mesmo que para isso seja necessário uma conversão explicita.

Algumas vezes em situações precisamos utilizar este operador com tipos que podem ser nulos. Como o exemplo abaixo:

Pessoa pessoa = new Pessoa();
int? codigo = (pessoa==null) ? null : pessoa.Id;

Nesse exemplo temos um objeto pessoa, que pode ser nulo ou não, se ele for nulo, temos que atribuir null a variável codigo, se não atribuiremos o Id (int) do objeto pessoa.

Este exemplo apresenta o seguinte erro durante a compilação

Type of conditional expression cannot be determined because there 
is no implicit conversion between '<null>' and 'int'

Uma das maneiras de corrigir este código é convertendo o null para int?, o que pode ser feito da seguinte maneira:

Pessoa pessoa = new Pessoa();
int? codigo = (pessoa == null) ? (int?)null : pessoa.Id;

Ou convertendo o Id da pessoa para int?, o que importa é que eles retornem explicitamente um tipo nullable:

Pessoa pessoa = new Pessoa();
int? codigo = (pessoa == null) ? null : (int?)pessoa.Id;

espero que esta dica rápida seja útil.

abs

Rodolfo

C#

Série de artigos muito legais de James Michael Hare, com muitas dicas e técnicas que melhoram consideravelmente a maneira que programamos.

C#/.NET Five Little Wonders That Make Code Better (1 of 3)

1.  The Null Coalescing Operator (??)
2.  The As Cast
3.  Auto-Properties
4.  The Stopwatch Class
5.  TimeSpan factory methods

Link: http://geekswithblogs.net/BlackRabbitCoder/archive/2010/08/26/c.net-five-little-wonders-that-make-code-better-1-of.aspx

C#/.NET Five More Little Wonders That Make Code Better (2 of 3)

1. string.IsNullOrEmpty() and string.IsNullOrWhiteSpace()
2. string.Equals()
3. using Statements
4. static Class Modifier
5. Object and Collection Initializers

Link: http://geekswithblogs.net/BlackRabbitCoder/archive/2010/09/02/c.net-five-more-little-wonders-that-make-code-better-2.aspx

C#/.NET Five More Little Wonders That Make Code Better (3 of 3)

1. Implicit Typing
2. LINQ Extension Methods
3. Extension Methods
4. System.IO.Path
5. Generic Delegates

Link: http://geekswithblogs.net/BlackRabbitCoder/archive/2010/09/09/c.net-five-final-little-wonders-that-make-code-better-3.aspx

Vale o estudo.

Rodolfo

C#

Quando o assunto era gráfico, freqüentemente precisávamos adotar algum componente de terceiros, o que acabava gerando maiores custos e falta de padronização em nossos projetos.

Entretanto com o Reporting Services 2008 tivemos melhoras significativas em termos de gráficos e possibilidades na plataforma Microsoft, ainda na versão 3.5 do .NET foi lançado um pacote com estes recusos de gráficos, disponibilizando-os para o ASP.NET e Win Form.

No .NET 3.5 o Microsoft Chart Controls era disponibilizado separado, por download que poderia ser feito em:

http://www.microsoft.com/downloads/en/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=en#QuickDetails

Com o Visual Studio 2010 e o .NET Framework 4, este recuso já é disponibilizado nativamente.

Entre os diversos tipos de gráficos disponíveis escolhi o Gráfico de barras para utilizar como exemplo:

Vou fazer um gráfico de barras com os seguintes valores de números de acessos:

List<Acesso> acessos = new List<Acesso>();
acessos.Add(new Acesso { valor = 300, data = "01/08/2010"});
acessos.Add(new Acesso { valor = 340, data = "03/08/2010"});
acessos.Add(new Acesso { valor = 231, data = "04/08/2010"});
acessos.Add(new Acesso { valor = 500, data = "02/08/2010"});

 

Agora vou adicionar o controle de Gráfico na minha página, e customizar algumas propriedades nele:

1) Title

  • ShadowColor: cor da sombra do texto
  • Font: estilo do texto
  • ShadowOffset: deslocamento da sobra to texto
  • Text: texto do titulo
  • ForeColor: cor do texto

2)Legends

  • Enable: abilita/desabilita as legendas

3)BorderSkin

  • SkinStyle: estilo da borda do gráfico

4)ChartArea

  • ChartArea: local para adicionar areas ao gráfico e customizar a exibição dos dados
  • Area3DSyle: customização para a area do gráfico ser exibida em 3d
  • AxisY: customização para o eixo Y do gráfico
  • AxixX: customização para o eixo X do gráfico

Após estas customizações temos o seguinte controle na página:

<asp:Chart ID="Chart1" runat="server">
<Titles>
    <asp:Title ShadowColor="32, 0, 0, 0"
    Font="Trebuchet MS, 14.25pt, style=Bold" ShadowOffset="3"
    Text="Acessos ao Site" ForeColor="26, 59, 105">
    </asp:Title>
</Titles>
<Legends>
    <asp:Legend Enabled="false" >
    </asp:Legend>
</Legends>
<BorderSkin SkinStyle="Emboss"></BorderSkin>
<ChartAreas>
    <asp:ChartArea Name="ChartArea1"
    BorderColor="64, 64, 64, 64" BackSecondaryColor="Transparent"
    BackColor="64, 165, 191, 228" ShadowColor="Transparent"
    BackGradientStyle="TopBottom">
        <Area3DStyle Rotation="10" Perspective="10"
         Enable3D="True" Inclination="15" IsRightAngleAxes="False"
            WallWidth="0" IsClustered="False" />
        <AxisY LineColor="64, 64, 64, 64">
            <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" />
            <MajorGrid LineColor="64, 64, 64, 64" />
        </AxisY>
        <AxisX LineColor="64, 64, 64, 64">
            <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" />
            <MajorGrid LineColor="64, 64, 64, 64" />
        </AxisX>
    </asp:ChartArea>
</ChartAreas>
</asp:Chart>

Com a estrutura do controle montada podemos adicionar Séries de dados (Series) com os valores em cada uma (Points). Lembrando que isso pode ser feito na página, e também, como nesse exemplo adicionado dinamicamente.

Neste exemplo vou adicionar os dados a partir de uma coleção de Acessos.

Series series = new Series();
series.ChartArea = "ChartArea1";
series.Name = "Series1";
series.Color = System.Drawing.ColorTranslator.FromHtml("#4B6C9E");
series.BorderColor = System.Drawing.ColorTranslator.FromHtml("#3A4F63");

foreach (var item in acessos)
{
    series.Points.Add(new DataPoint {
        YValues = new double[] { item.valor },
        ToolTip = item.data,
        AxisLabel = item.data });
}
Chart1.Series.Add(series);

Como resultado do exemplo teremos um grafico

 

Este post teve como finalidade apresentar um pouco do .NET Chart Controls, todos os recursos e possibilidades do Chart Controls pode ser encontrado em:

http://code.msdn.microsoft.com/mschart

Estou a disposição para dúvidas, criticas e sugestões.

Muito obrigado

Rodolfo

ASP.NET

Como integrar nossas aplicações com tarefas do sistema operacional do windows phone 7?
Fazer ligações, enviar sms, abrir o navegador, etc

muito obrigado

Rodolfo

Desenvolvimento