Я использую встроенную десериализацию XML (не потому, что это был мой выбор, а устаревший код), чтобы десериализовать xml в строго типизированный объект.
ПРИМЕЧАНИЕ: я не могу контролировать xml, это внешний API
Проблема в том, что узел xml был расширен, чтобы включить дочерний узел с тем же именем, и он нарушает сериализацию.
Например, xml выглядит следующим образом:
<people>
<person>
<id>1234</id>
<person>
<name>This is my name</name>
<person>
</person>
</people>
Со следующими объектами
[XmlType("person")]
public class Person {
[XmlElement("id")]
public int Id { get; set; }
[XmlElement("person")]
public PersonTitle Title{ get; set; }
}
[XmlType("person")]
pulic class PersonTitle
{
[XmlElement("name")]
public string Name { get; set; }
}
Выдает ошибку при вызове (T) xmlserializer.Deserialize (stream) из-за повторяющихся имен, даже если xml действителен. Лично я бы не стал копировать макет xml в объектах, просто чтобы автоматически десериализовать его, когда десериализацию вручную поддерживать проще (особенно, если она никогда не сериализуется с помощью .net, во-первых).
Однако я хотел бы знать, есть ли способ обойти это, даже если это означает выравнивание дочернего объекта.
Я знаю, что это не работает, но как пример:
[XmlType("person")]
public class Person {
[XmlElement("id")]
public int Id { get; set; }
[XmlElement("person/name")]
public string Title{ get; set; }
}
Любая помощь приветствуется.