public static bool TryGetWrappedData(this IDataObject data, string dataFormat, DataObjectStorage storage, out IEnumerable <object> wrappedData) { // Retrieve wrapped data of the specified format and storage type string wrappedFormat = GetWrappedDataFormat(dataFormat, storage); SerializableWrapper wrapper = data.GetData(wrappedFormat) as SerializableWrapper; if (wrapper != null && wrapper.Data != null && wrapper.Data.Count > 0) { wrappedData = wrapper.Data; return(true); } // If retrieving by-value failed, try retrieving by-reference and cloning the result if (storage == DataObjectStorage.Value) { IEnumerable <object> byReferenceData; if (data.TryGetWrappedData(dataFormat, DataObjectStorage.Reference, out byReferenceData)) { wrappedData = byReferenceData.Select(obj => obj.DeepClone()).ToArray(); return(true); } } wrappedData = null; return(false); }
/// <summary> /// Retrieves the specified non-<see cref="SerializableAttribute"/> data from the specified data object using a serializable wrapper. /// </summary> /// <param name="data"></param> /// <param name="format"></param> /// <returns></returns> public static object GetWrappedData(this IDataObject data, string format) { SerializableWrapper wrapper = data.GetData(WrapperPrefix + format) as SerializableWrapper; if (wrapper != null) { return(wrapper.Data); } else { return(null); } }
/// <summary> /// Stores the specified non-<see cref="SerializableAttribute"/> data inside the specified data object using a serializable wrapper. /// </summary> /// <param name="dataFormat">The format of the data being stored</param> /// <param name="storage">The type of data being stored</param> public static void SetWrappedData(this IDataObject data, IEnumerable <object> values, string dataFormat, DataObjectStorage storage) { object[] valuesArr = values.ToArray(); string wrappedFormat = GetWrappedDataFormat(dataFormat, storage); SerializableWrapper wrapper = storage == DataObjectStorage.Reference ? new SerializableReferenceWrapper(valuesArr) : new SerializableWrapper(valuesArr); data.SetData(wrappedFormat, wrapper); // Reference data is automatically stored as a value as well if (storage == DataObjectStorage.Reference) { data.SetWrappedData(valuesArr, dataFormat, DataObjectStorage.Value); } }