Как десериализовать JSON с неназванной коллекцией типов, используя DataContractSerializer

Я использую веб-сервис для получения данных о пробеге маршрута. Затем я использую десериализатор, чтобы разобрать его. Вот как выглядит JSON:

[{"__type":"CalculateMilesReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"TMiles":445.5]

С этим ответом у меня была пара проблем. Почему это входит в коллекцию и как мне установить объектную модель? Также он жаловался на специальный атрибут __type. Итак, я сделал "взломать" и "готовые" строки:

// 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");

Тогда все работало с этим объектом:

[DataContract]
public class PCMilerResponse
{
    [DataMember(Name = "Errors", EmitDefaultValue = false)]
    public PCMilerError[] Errors { get; set; }

    [DataMember(Name = "TMiles", EmitDefaultValue = false)]
    public decimal DrivingDistance { get; set; }    
}

Теперь я изменил звонок на веб-сервис и получаю следующий ответ

[
{"__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"}]
}
]

Теперь имеет смысл, почему существует массив и «__type». Но я не уверен, как написать объект, чтобы правильно разобрать его. Я предполагаю, что специальные атрибуты должны быть применены, и, возможно, общий массив должен быть там? Любая помощь о том, как правильно десериализовать его?

Постскриптум Я могу сделать больше взлома и заменить эти строки, превращая его в объект с двумя объектами внутри, но мне интересно, есть ли «правильный» способ справиться с этим.

Ответы на вопрос(2)

Ваш ответ на вопрос