Самый простой способ диагностировать проблему с десериализацией XML - это создать экземпляр вашей модели в памяти и сериализовать его, а затем сравнить выходной XML с требуемым вводом.Таким образом, если я сделаю:
Console.WriteLine(new Response { Inventory = new List<Inventory> { new Inventory { Id = 23 } } }.Serialize() );
Выходной XML:
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Inventory>
<Inventory>
<Id>23</Id>
</Inventory>
</Inventory>
</Response>
Как вы можете видеть, есть дополнительный уровень вложенности <Inventory>
элементов.Это происходит потому, что по умолчанию XmlSerializer
сериализует коллекции с внешним элементом элемента контейнера, названным в честь сериализованного члена (здесь Inventory
), а также с элементом для каждого элемента, названного (по умолчанию) после типа элемента (здесьтакже Inventory
).Демонстрационная скрипка # 1 здесь .
Если вы не хотите этого, вам нужно добавить [XmlElement]
к public List<Inventory>
примерно так:
public class Response
{
[XmlElement]
public List<Inventory> Inventory { get; set; }
}
Теперь Inventory
будет сериализован без внешнего элемента контейнера, и ваш код десериализации будет успешно выполнен.Демонстрационная скрипка # 2 здесь .
(В качестве альтернативы вы можете создать свой XDocument
с необходимым дополнительным уровнем вложенности.)