2016-03-22 6 views
3

Ich versuche, ein Objekt in dynamischen Typ konvertieren, aber die Konvertierung ist mit RunTimeBinder Ausnahme fehlgeschlagen. Ich habe versucht, zwei Methoden zu verwenden, auf die ich in Stackoverflow-Antworten gestoßen bin.Konvertieren von Objekt zu Typ Dynamisch in C#

Code 1:

object objSum; 
dynamic dynSum; 
objSum = dataTableColumnChart.Compute(String.Format("Count({0})", strColumnName), ""); 
dynSum = Convert.ChangeType(objSum, objSum.GetType());\ 
Debug.Writeline(dynSum); 

Code 2:

dynSum=objSum; 
Debug.Writeline(dynSum); 

Die Ausnahme wird ausgelöst, ist dies:

A first chance exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in Unknown Module. 

Bitte beachten Sie, dass in beiden Fällen Ausnahme ausgelöst, wenn Debug-Anweisung hingerichtet.

+0

Sind Sie sicher, dass Sie den gleichen Fehler mit Code 2 bekommen? Ich denke nicht, dass eine einfache Zuweisung zu einem dynamischen Typ eine Ausnahme verursacht. Können Sie die genaue Fehlermeldung angeben? – PMF

+0

@PMF Hallo, ich habe jetzt die Details in meiner Frage hinzugefügt. – JKay

+0

ist eine Ausnahme, die mit Debug.Writeline (dynSum.ToString()) ausgelöst wird; – Eminem

Antwort

2

Die Ausnahme ist:

Cannot dynamically invoke method 'Write' because it has a Conditional attribute 

Und wenn Sie mögliche Debug.WriteLine Eingänge prüfen, "dynamisch" ist nicht einer von ihnen. So müssen Sie es Zeichenfolge zu werfen, zum Beispiel:

string strForWriteLine = dynSum.ToString() as string; 
    Debug.WriteLine(strForWriteLine); 

Hope this

* Edit hilft: Ein wenig ausführlich über dynSum.ToString() als Zeichenfolge; Wenn Sie nur ToString() verwenden, erhalten Sie immer noch eine dynamische Zeichenfolge.

var strForWriteLine = dynSum.ToString(); 

strForWriteLine der Typ ist dynamische {string}

+0

Hallo, es funktioniert jetzt. Vielen Dank! Die Konvertierung lief also gut und das Problem war mit Debug Writeline. Danke für die Erklärung. – JKay

0

Versuchen Sie Folgendes:

dynSum = objSum; 
+0

Hallo, ich habe das schon ausprobiert und in meiner Frage erwähnt. – JKay

11

Hier Erweiterung Methode ist, ein Objekt zu Dynamische

public static dynamic ToDynamic(this object value) 
    { 
     IDictionary<string, object> expando = new ExpandoObject(); 

     foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType())) 
      expando.Add(property.Name, property.GetValue(value)); 

     return expando as ExpandoObject; 
    } 
0

Sie sollten JsonConvert verwenden zu konvertieren. Fist von allem, Serialize-Objekt zu Zeichenkette, dann Deserialize Zeichenkette zu dynamischem.

string str = JsonConvert.SerializeObject(objectstring); 
dynamic obj = JsonConvert.DeserializeObject(str); 
Verwandte Themen