public static Dictionary <string, IMetadataValue> ToStaticMetadataDictionary(this IObjectWithMetadata objectWithMetadata)
        {
            Argument.IsNotNull(() => objectWithMetadata);

            var dictionary = new Dictionary <string, IMetadataValue>();

            foreach (var metadata in objectWithMetadata.MetadataCollection)
            {
                var value = objectWithMetadata.GetMetadataValue(metadata.Name);

                var metadataValue = new MetadataValue(metadata);

                var subObjectWithMetadata = value as IObjectWithMetadata;
                if (subObjectWithMetadata != null)
                {
                    metadataValue.Value = subObjectWithMetadata.ToStaticMetadataDictionary();
                }
                else
                {
                    metadataValue.Value = value;
                }

                dictionary.Add(metadata.Name, metadataValue);
            }

            return(dictionary);
        }
        public static List <IMetadataValue> ToStaticMetadataList(this IObjectWithMetadata objectWithMetadata)
        {
            Argument.IsNotNull(() => objectWithMetadata);

            var metadataDictionary = objectWithMetadata.ToStaticMetadataDictionary();

            return(metadataDictionary.ToStaticMetadataList());
        }