private static IDictionary<string, object> ToDictionary(object parameters, out IDictionary<string, FacebookMediaObject> mediaObjects, out IDictionary<string, FacebookMediaStream> mediaStreams)
{
mediaObjects = new Dictionary<string, FacebookMediaObject>();
mediaStreams = new Dictionary<string, FacebookMediaStream>();
var dictionary = parameters as IDictionary<string, object>;
// todo: IEnumerable<KeyValuePair<T1,T2>> and IEnumerable<Tuple<T1, T2>>
if (dictionary == null)
{
if (parameters == null)
return null;
// convert anonymous objects / unknown objects to IDictionary<string, object>
dictionary = new Dictionary<string, object>();
#if TYPEINFO
foreach (var propertyInfo in parameters.GetType().GetTypeInfo().DeclaredProperties.Where(p => p.CanRead))
{
dictionary[propertyInfo.Name] = propertyInfo.GetValue(parameters, null);
}
#else
foreach (var propertyInfo in parameters.GetType().GetRuntimeProperties())
{
if (!propertyInfo.CanRead) continue;
dictionary[propertyInfo.Name] = propertyInfo.GetValue(parameters, null);
}
#endif
}
foreach (var parameter in dictionary)
{
if (parameter.Value is FacebookMediaObject)
mediaObjects.Add(parameter.Key, (FacebookMediaObject)parameter.Value);
else if (parameter.Value is FacebookMediaStream)
mediaStreams.Add(parameter.Key, (FacebookMediaStream)parameter.Value);
}
foreach (var mediaObject in mediaObjects)
dictionary.Remove(mediaObject.Key);
foreach (var mediaStream in mediaStreams)
dictionary.Remove(mediaStream.Key);
return dictionary;
}