VS для Windows, а также, возможно, для Mac, имеет специальный инструмент, который преобразует скопированные Xml в автоматически сгенерированные классы.Теперь, это не идеально, но если вы возьмете свой XML-файл, он генерирует пару классов, подобных этому:
public class ArrayOfAgency
{
public ArrayOfAgencyDbAgencyDefinition DbAgencyDefinition { get; set; }
}
public class ArrayOfAgencyDbAgencyDefinition
{
public string Name { get; set; }
public string Country { get; set; }
public string City { get; set; }
public string State { get; set; }
public string GtfsZipUrlDirectory { get; set; }
public string GtfsZipUrlFileName { get; set; }
}
Как вы могли заметить, ArrayOfAgency
определяется как класс, содержащий DbAgencyDefinition
, которыйВот почему он выдает ошибку при попытке десериализации его непосредственно в List<DbAgencyDefinition>
.Тип и то, что ожидает сериализатор, не совсем одинаковы.
var serializer = new XmlSerializer(typeof(ArrayOfAgency));
var agencies = ((ArrayOfAgency)serializer.Deserialize(reader)).DbAgencyDefinition;
Кроме того, как я упоминал, автоматическая генерация может быть не идеальной, поскольку ArrayOfAgency
может потребоваться хранить массив вместо прямогокласс, если в Xml может быть несколько DbAgencyDefinition
.
public class ArrayOfAgency
{
public ArrayOfAgencyDbAgencyDefinition[] DbAgencyDefinition { get; set; }
}
Если вам нужна дополнительная помощь или информация о сериализации Xml, ознакомьтесь с документами .