public static IEnumerable <DicomPropertyInfo> GetDicomProperties(DicomPropertyInfo parent, Type type) { foreach (var property in type.GetProperties()) { var dicomProperty = new DicomPropertyInfo(parent, property); var dicomAttributeAttribute = property.GetCustomAttribute <DicomAttributeAttribute>(); if (dicomAttributeAttribute != null) { dicomProperty.DicomAttribute = new DicomAttribute(property.Name, dicomAttributeAttribute.Tag, dicomAttributeAttribute.VR); yield return(dicomProperty); } else { var dicomAttributeField = typeof(DicomAttribute).GetField(property.Name, BindingFlags.Public | BindingFlags.Static); if (dicomAttributeField != null) { dicomProperty.DicomAttribute = (DicomAttribute)dicomAttributeField.GetValue(null); yield return(dicomProperty); } else { var count = 0; foreach (var descendant in GetDicomProperties(dicomProperty, property.PropertyType)) { count++; yield return(descendant); } if (count == 0) { throw new NotSupportedException($"{dicomProperty} is not a known DICOM attribute"); } } } } }
private DicomPropertyInfo(DicomPropertyInfo parent, PropertyInfo property) { Parent = parent; Property = property; }