O ASP.NET Webservice é uma excelente solução para se criar comunicação entre sistemas de diferentes plataformas. Com ele torna-se possível enviar e receber dados utilizando uma linguagem universal, o XML.
Porém o XML vem sendo aos poucos substituído pelo JSON (JavaScript Object Notation), que é um novo formato para realizarmos intercâmbio de dados. Ele tem a mesma função que o XML, porém vem com a proposta de ser mais leve que seu predecessor. Para quem quiser mais detalhes, ao final do post possui links com algum material.
Importante já adiantar que para execução deste projeto foi utilizado o Json.NET (por James Newton-King). Seus binários e fontes podem ser baixados no CodePlex.
Criando um ASP.NET Webservice
Primeiramente vamos criar um projeto de website (File => New WebSite), em seguida adicionamos um novo ítem de webservice (Figura 01).
Após termos nosso webservice, vamos desde já inserir como referência o binário do Json.NET (Newtonsoft.Json.dll) e adicionarmos os namespaces abaixo:
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
Como nosso webservice será consumido como um AJAX pela aplicação Windows Phone que irei construir, e para deixa-lo pré-disposto a ser consumido por qualquer outra fonte, vamos definir nossa classe como um ScriptService, assim permitiremos que nossa classe poderá ser invocada por qualquer script:
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class json_ws : System.Web.Services.WebService
Definindo JSON
Legal! Agora que nossa classe está pronta para ser o webservice que precisamos, vamos agora criar um método simples que irá retornar um JSON a partir de um DataTable. Para que isso aconteça como esperamos, temos que definir que o método abaixo terá um ResponseFormat do tipo Json. Isso é bem simples de fazer como mostrado abaixo:
[WebMethod(Description = "Get world hour.", CacheDuration = 10)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetHourUTC(int TimeZone) {
DataTable dtHour = new DataTable("HourUTC");
dtHour.Columns.Add(new DataColumn("TimeZone", typeof(int)));
dtHour.Columns.Add(new DataColumn("Date", typeof(string)));
dtHour.Columns.Add(new DataColumn("Hour", typeof(string)));
DataRow drHour = dtHour.NewRow();
drHour["TimeZone"] = 0;
drHour["Date"] = DateTime.UtcNow.ToString("yyyy-MM-dd");
drHour["Hour"] = DateTime.UtcNow.ToString("HH:mm:ss");
dtHour.Rows.Add(drHour);
drHour = dtHour.NewRow();
drHour["TimeZone"] = TimeZone;
drHour["Date"] = DateTime.UtcNow.AddHours(TimeZone).ToString("yyyy-MM-dd");
drHour["Hour"] = DateTime.UtcNow.AddHours(TimeZone).ToString("HH:mm:ss");
dtHour.Rows.Add(drHour);
return Serialize(dtHour);
}
Aplicando Json.NET
Nosso método GetHourUTC irá retornar a hora zulu (GMT) atual, e também a hora de onde se parametrizou no TimeZone (lembrando que o TimeZone do Brasil é -3 horas, para horário de Brasília). Reparem que ao final do método estamos chamado um outro método Serialize. Este está logo abaixo e é onde iremos transformar um DataTable (ou mesmo um DataSet) em uma string de estrutura tipo JSON.
private string Serialize(object value)
{
Type type = value.GetType();
Newtonsoft.Json.JsonSerializer json = new Newtonsoft.Json.JsonSerializer();
json.NullValueHandling = NullValueHandling.Ignore;
json.ObjectCreationHandling = ObjectCreationHandling.Replace;
json.MissingMemberHandling = MissingMemberHandling.Ignore;
json.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
if (type == typeof(DataTable))
json.Converters.Add(new DataTableConverter());
else if (type == typeof(DataSet))
json.Converters.Add(new DataSetConverter());
StringWriter sw = new StringWriter();
Newtonsoft.Json.JsonTextWriter writer = new JsonTextWriter(sw);
writer.Formatting = Formatting.None;
writer.QuoteChar = '"';
json.Serialize(writer, value);
string output = sw.ToString();
writer.Close();
sw.Close();
return output;
}
Testando o Webservice
E voilá! Já temos um ASP.NET Webservice retornando um string JSON (a partir de um DataTable) à nossa disposição!

Figura 02 – Testando métodos GetHourUTC do webservice
Retorno
[{"TimeZone":0,"Date":"2012-04-11","Hour":"14:27:19"},{"TimeZone":-3,"Date":"2012-04-11","Hour":"11:27:19"}]
Conclusão
É muito fácil e bacana criar webservices usando plantaforma ASP.NET. E adaptarmos esses recursos para as novidades seguintes acaba sendo uma necessidade imprescindível. A dominação do JSON sobre o XML parece ser inevitável, visto as propostas que ele se pré dispõe. Um formato mais leve, rápido de ser transferido e ser serializável.