После обновления до fo-dicom 4.0 я начал получать DicomDataException: 'DicomTag doesn't support values'
при попытке получить DicomDataset из файла DICOMDIR.
Код выглядит следующим образом:
var dicomDirectory = await DicomDirectory.OpenAsync(dicomdirPath);
foreach (var patientRecord in dicomDirectory.RootDirectoryRecordCollection)
{
foreach (var studyRecord in patientRecord.LowerLevelDirectoryRecordCollection)
{
foreach (var seriesRecord in studyRecord.LowerLevelDirectoryRecordCollection)
{
foreach (var imageRecord in seriesRecord.LowerLevelDirectoryRecordCollection)
{
//this is the problematic line
var dicomDataset = imageRecord.GetValue<DicomSequence>(DicomTag.IconImageSequence, 0).Items.First();
//more stuff
}
}
}
}
С предыдущей версией (3.?) Я делал var dicomImage = imageRecord.Get<DicomSequence>(DicomTag.IconImageSequence).Items.First();
и это сработало очень хорошо, но после обновления я получал предупреждение об устаревании, поэтому я изменил его на рекомендованный метод, который был GetValue.
Как я могу получить набор данных, используя текущую версию fo-dicom?
Наконец, после изучения проблем Gitter и GitHub в fo-dicom (и, как @BenVoight упоминалось и в комментариях), я обнаружил, что в 4.0 мы должны использовать GetSequence(DicomTag.IconImageSequence)
вместо GetValue<DicomSequence>(DicomTag.IconImageSequence)
: при извлечении последовательностей будет использоваться метод GetValue. Было добавлено несколько других методов Get
, таких как GetValueOrDefault
, GetValues<T>
вместо GetValue<T[]>
и другие, что можно увидеть в тесте набора данных проекта.
Кроме того, в качестве следствия я также обнаружил еще одну несовместимость API в версии 4.0 относительно предыдущей версии (я опубликую ее здесь на случай, если кто-то обновится и потерян в изменениях): при работе с DicomImage мы не должны получать доступ к его .Dataset
чтобы получить значения, потому что это также устарело. Вместо этого мы должны сохранить ссылку на набор данных, из которого был создан DicomImage, чтобы получить значения тегов.
Get<DicomSequence>
должен стать вызовомGetSequence
, а неGetValue
: github.com/fo-dicom/fo-dicom/commit/…