web-dev-qa-db-fra.com

J'essaie de convertir un objet en type dynamique mais la conversion échoue avec l'exception RunTimeBinder

J'essaie de convertir un objet en type dynamique mais la conversion échoue avec l'exception RunTimeBinder. J'ai essayé d'utiliser deux méthodes que j'ai rencontrées dans les réponses Stackoverflow.

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);

L'exception levée est la suivante:

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

Veuillez noter que dans les deux cas, une exception est levée lorsque l'instruction Debug est exécutée.

11
JKay

L'exception est:

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

Et lorsque vous vérifiez les entrées Debug.WriteLine possibles, "dynamique" n'en fait pas partie. Vous devez donc le transtyper, en chaîne par exemple:

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

J'espère que cela t'aides

* Edit: Un petit détail sur dynSum.ToString () en tant que chaîne; Lorsque vous utilisez simplement ToString (), vous obtenez toujours une chaîne dynamique.

var strForWriteLine = dynSum.ToString();

le type de strForWriteLine est dynamic {string}

3
uTeisT

Voici la méthode d'extension pour convertir un objet en Dynamic

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;
    }
21
Anand Patel

vous devez utiliser JsonConvert. Tout d'abord, sérialisez l'objet en chaîne, puis désérialisez la chaîne en dynamique.

string str = JsonConvert.SerializeObject(objectstring);
dynamic obj = JsonConvert.DeserializeObject(str);
9
thanh duc

Essayez ce qui suit:

dynSum = objSum;
0
Eminem