/// <summary> /// Gets all metadata /// Iterates recursively through all metadata /// </summary> /// <remarks> /// Intented for debug only!!! /// </remarks> public static List <(string metadataPath, object value)> GetListOfMetadataForDebug(this BitmapMetadata metadata) { var listOfAllMetadata = new List <(string metadataPath, object value)>(); try { GetMetadataRecursively(metadata, string.Empty); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { Debug.WriteLine($"Exception while trying to iterate recursively over metadata. We were able to read {listOfAllMetadata.Count} metadata entries."); Debug.WriteLine(ex); } return(listOfAllMetadata); void GetMetadataRecursively(BitmapMetadata metadata, string query) { if (metadata == null) { return; } foreach (string relativeQuery in metadata) { string absolutePath = query + relativeQuery; object metadataQueryReader = null; try { metadataQueryReader = metadata.GetQuerySafe(relativeQuery); listOfAllMetadata.Add((absolutePath, metadataQueryReader)); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { listOfAllMetadata.Add((absolutePath, $"######## INVALID METADATA: {ex.Message}")); Debug.WriteLine(ex); } if (metadataQueryReader is BitmapMetadata innerMetadata) { GetMetadataRecursively(innerMetadata, absolutePath); } } } }
public static void CopyMetadataPropertyTo(this BitmapMetadata source, BitmapMetadata target, string query) { if (source == null || target == null || string.IsNullOrWhiteSpace(query)) { return; } try { var value = source.GetQuerySafe(query); if (value == null) { return; } target.SetQuery(query, value); } catch (InvalidOperationException) { // InvalidOperationException is thrown if metadata object is in readonly state. return; } }