Also habe ich diesen Code, der rekursiv alle Eigenschaften und ihren Inhalt eines bestimmten Objekts drucken soll.Iterieren über Wörterbuch durch Reflexion erhalten
static public void PrintProperties(object obj, int indent)
{
if (obj == null) return;
string indentString = new string(' ', indent);
Type objType = obj.GetType();
PropertyInfo[] properties = objType.GetProperties();
foreach (PropertyInfo property in properties)
{
object propValue = property.GetValue(obj, null);
if (property.PropertyType.Assembly == objType.Assembly && !property.PropertyType.IsEnum)
{
Console.WriteLine("{0}{1}:", indentString, property.Name);
PrintProperties(propValue, indent + 2);
}
else
{
if (null != propValue)
{
Type t = propValue.GetType();
//Console.WriteLine(":::::{0}:::::", propValue.GetType());
bool isDict = t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary<,>);
if (isDict)
{
Type keyType = t.GetGenericArguments()[0];
Type valueType = t.GetGenericArguments()[1];
foreach (KeyValuePair<keyType, valueType> kvp in (Dictionary<keyType, valueType>)propValue)
{
Console.WriteLine(string.Format("Key = {0}, Value = {1}", kvp.Key, kvp.Value));
}
}
}
Console.WriteLine("{0}{1}: {2}", indentString, property.Name, propValue);
}
}
}
Es funktioniert nicht für List
und Dictionary
noch, ich bin in diesem Augenblick auf dem Dictionary
Teil arbeiten.
Problem ist, extrahieren ich die Art des Schlüssels und Wert mit:
Type keyType = t.GetGenericArguments()[0];
Type valueType = t.GetGenericArguments()[1];
Aber dann VS2013 sagt mir, dass es ein Problem mit dieser Zeile:
foreach (KeyValuePair<keyType, valueType> kvp in (Dictionary<keyType, valueType>)propValue)
Es sagt mir, dass Der Typ oder Namespace KeyType und valueType wurden nicht gefunden. Was fehlt mir?
Danke.
PS: .net 4.5.1
'keyType' &' valueType' in Ihrem Beispiel sind Instanzen von '' aber Baumuster zur KeyValuePair 'erfordert einen Typnamen so, dass der Typ zur Laufzeit ausgewertet werden kann. Sie müssen auf das Wörterbuch mit der nicht-generischen 'Dictionary'-Klasse zugreifen und die Schlüssel- und Wertobjekte manuell umwandeln. –
Howwie
Mögliches Duplikat von [Wie lassen sich ganze Objekte am besten in C# ablegen?] (Http: // stackoverflow.com/questions/360277/what-is-the-best-weg-zu-dump-gesamte-objekte-zu-einem-log-in-c) –