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.
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}
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;
}
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);
Essayez ce qui suit:
dynSum = objSum;