Como desserializar JSON com coleção de tipos sem nome usando DataContractSerializer
Estou usando o serviço da web para obter dados sobre a milhagem da rota. Então estou usando o desserializador para analisá-lo. Aqui está a aparência do JSON:
[{"__type":"CalculateMilesReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"TMiles":445.5]
Com esta resposta, tive alguns problemas. Por que o pacote é agrupado e como faço para definir o modelo de objeto? Também estava reclamando do atributo __type especial. Então, eu "hackeei" e "preparei" a string:
// Cut off first and last charachters [] - they send objects as arrays
rawJSON = rawJSON.Substring(1, rawJSON.Length - 2);
// Hide "__type" attribute as it messes up serializer with namespace
rawJSON = rawJSON.Replace("__type", "type");
Então tudo funcionou com este objeto:
[DataContract]
public class PCMilerResponse
{
[DataMember(Name = "Errors", EmitDefaultValue = false)]
public PCMilerError[] Errors { get; set; }
[DataMember(Name = "TMiles", EmitDefaultValue = false)]
public decimal DrivingDistance { get; set; }
}
Agora modifiquei a chamada para o serviço web e recebo a resposta a seguir
[
{"__type":"CalculateMilesReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"TMiles":445.5},
{"__type":"GeoTunnelReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"GeoTunnelPoints":
[{"Lat":"34.730466","Lon":"-92.247147"},{"Lat":"34.704863","Lon":"-92.29329"},{"Lat":"34.676312","Lon":"-92.364654"},{"Lat":"29.664271","Lon":"-95.236735"}]
}
]
Agora faz sentido por que existe matriz e "__type". Mas não tenho certeza de como escrever um objeto para analisá-lo corretamente. Eu acho que atributos especiais precisam ser aplicados e talvez a matriz genérica precise estar lá? Alguma ajuda sobre como desserializar adequadamente?
P.S. Eu posso fazer mais hackers e substituir essas strings, tornando-o objeto com 2 objetos dentro, mas me pergunto se existe uma maneira "adequada" de lidar com isso.