Мне нужно получить доступ к определенному свойству внутри COM-объекта (iTunes COM Library). Вы можете получить доступ к этому свойству с помощью динамического представления отладчика Visual Studio.
Я пытался получить это свойство с помощью Reflection, но я не получил никаких частных свойств или полей обратно.
Я могу получить доступ ко всем свойствам, которые я также вижу в отладчике, используя эту строку:
new Microsoft.CSharp.RuntimeBinder.DynamicMetaObjectProviderDebugView(myObject).Items
Однако я бы предпочел не использовать этот вызов, поскольку считаю, что существует более простое решение.
Если у вас установлен iTunes, это будет простой пример того, чего я пытаюсь достичь:
iTunesAppClass app;
if (Process.GetProcessesByName("iTunes").Any())
{
app = new iTunesAppClass();
}
else
{
return;
}
foreach (IITPlaylist playlist in app.LibrarySource.Playlists)
{
// This does not work. There is no "Parent".
//var parent = playlist.Parent;
Type playListType = playlist.GetType();
// both contain 0 results
var fields = playListType.GetFields(BindingFlags.NonPublic);
var properties = playListType.GetFields(BindingFlags.NonPublic);
// works but only during runtime
//var parent2 = new Microsoft.CSharp.RuntimeBinder.DynamicMetaObjectProviderDebugView(playlist).Items[4];
}