Десериализация XML-документа с корнем, являющимся списком
У меня есть внешний XML-документ, который мне нужно импортировать в мое приложение. Документ написан плохо, но я ничего не могу с этим поделать.
<?xml version="1.0" encoding="iso-8859-1"?>
<xml>
<Items>
<Property1 />
<Property2 />
...
</Items>
<Items>
<Property1 />
<Property2 />
...
</Items>
...
</xml>
Как мне использовать XmlSerializer
за это? Кажется, не имеет значения, какую настройку класса я использую, или я ставлю XmlRoot(ElementName="xml")
на моем базовом классе это всегда говорит, что <xml xmlns=''>
неожиданно
Изменить: добавлен код C#, который я использую
[XmlRoot(ElementName = "xml")]
public class Container
{
public List<Items> Items { get; set; }
}
public class Items
{
public short S1 { get; set; }
public short S2 { get; set; }
public short S3 { get; set; }
public short S4 { get; set; }
public short S5 { get; set; }
public short S6 { get; set; }
public short S7 { get; set; }
}
public class XMLImport
{
public Container Data{ get; private set; }
public static XMLImport DeSerializeFromFile(string fileName)
{
XMLImport import = new XMLImport();
XmlSerializer serializer = new XmlSerializer(typeof(Container));
using (StreamReader reader = new StreamReader(fileName))
import.Data = (Container)serializer.Deserialize(reader);
return import;
}
}
2 ответа
Скажи, у тебя есть класс Items
карты для каждого <Items>
узел:
public class Items
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
Вы можете десериализовать свой список Items
как это:
var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""iso-8859-1""?>
<xml>
<Items>
<Property1 />
<Property2 />
</Items>
<Items>
<Property1 />
<Property2 />
</Items>
</xml>");
var serializer = new XmlSerializer(typeof(List<Items>), new XmlRootAttribute("xml"));
List<Items> list = (List<Items>)serializer.Deserialize(doc.CreateReader());
Корень вашего XML не является списком, корень вашего XML является <xml>
узел я думаю вас просто смущает его название:)
Пожалуйста, перейдите по следующей ссылке, есть много хороших ответов, за которые проголосовало много людей.
Вот ссылка: Как десериализовать XML-документ
Ошибка десериализации Xml для объекта - xmlns='' не ожидалось
Просто снимите пространство имен =:
[XmlRoot("xml"), XmlType("xml")]
public class RegisterAccountResponse {...}