オブジェクトを動的型に変換しようとしていますが、RunTimeBinder例外で変換が失敗します。 Stackoverflowの回答で出くわした2つの方法を使用してみました。
コード1:
object objSum;
dynamic dynSum;
objSum = dataTableColumnChart.Compute(String.Format("Count({0})", strColumnName), "");
dynSum = Convert.ChangeType(objSum, objSum.GetType());\
Debug.Writeline(dynSum);
コード2:
dynSum=objSum;
Debug.Writeline(dynSum);
スローされる例外はこれです:
A first chance exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in Unknown Module.
どちらの場合も、Debugステートメントが実行されると例外がスローされることに注意してください。
例外は次のとおりです。
Cannot dynamically invoke method 'Write' because it has a Conditional attribute
そして、可能なDebug.WriteLine入力をチェックすると、「動的」はそれらの1つではありません。したがって、たとえば、文字列にキャストする必要があります。
string strForWriteLine = dynSum.ToString() as string;
Debug.WriteLine(strForWriteLine);
お役に立てれば
*編集:dynSum.ToString()as string;についての詳細:ToString()を使用するだけでも、動的な文字列が得られます。
var strForWriteLine = dynSum.ToString();
strForWriteLineのタイプはdynamic {string}
オブジェクトを動的に変換する拡張メソッドは次のとおりです
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;
}
jsonConvertを使用する必要があります。まず、オブジェクトを文字列にシリアル化してから、文字列を動的に非シリアル化します。
string str = JsonConvert.SerializeObject(objectstring);
dynamic obj = JsonConvert.DeserializeObject(str);
以下を試してください:
dynSum = objSum;