Мне дали несколько файлов "XML", которые не имеют надлежащей схемы (я думаю, что это проблема), и медицинское устройство, которое их генерирует, не может быть изменено для создания простого для анализа XML. (С такой невероятно маленькой модификацией (дополнительная упаковка Images тегов вокруг Image записей) было бы тривиально читать эти файлы - разве это не то, о чем XML?)
По сути, я застрял здесь. XML выглядит так:
<Series>
<Metadata1>foo</Metadata1>
<Metadata2>bar</Metadata2>
...
<Image>...</Image>
<Image>...</Image>
...
</Series>
(может быть любое количество изображений, но все возможные теги метаданных известны). Мой код выглядит так:
public class Image { ... }
public class Series : List<Image>
{
public Series() { }
public string Metadata1;
public string Metadata2;
...
}
Когда я запускаю это так:
XmlSerializer xs = new XmlSerializer(typeof(Series));
StreamReader sr = new StreamReader(path);
Series series = (Series)xs.Deserialize(sr);
sr.Close();
объекты List of Image правильно читают данные в объекте серии, но поля Metadata1 / 2 / etc не читаются (фактически, при просмотре объекта в отладчике отображаются все поля метаданных внутри поля вида «Raw View») ).
Когда я меняю код:
public class Series // // removed this : List<Image>
{
public Series() { }
public string Metadata1;
public string Metadata2;
...
}
и запустив ридер по файлу, я получаю объект серии с Metadata1 / 2 / etc. заполнены идеально, но данные изображения не читаются (очевидно).
Как мне проанализировать обе метаданные1 / 2 / и т.д. и серия изображений с наименьшим количеством болезненного специального кода?
Должен ли я написать какой-нибудь собственный (болезненный? Легкий?) Метод ReadXML для реализации IXMLSeralizable?
Мне не особо важно, как расположены объекты, так как мое программное обеспечение, которое использует эти классы C #, абсолютно гибкое:
List<Image> Images;
для изображений было бы хорошо, или, возможно, метаданные обернуты в некоторый объект, что угодно. ..