2016-03-22 7 views
3

オブジェクトを動的型に変換しようとしていますが、RunTimeBinder例外で変換が失敗しています。私はStackoverflow答えに出くわした2つの方法を使用してみました。C#でオブジェクトを動的に型変換する

コード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. 

デバッグ文があるとき、どちらの場合に例外がスローされることに注意してください実行される。

dynSum = objSum; 
+0

コード2で同じエラーが発生してもよろしいですか?私は、動的な型への単純な代入が例外を引き起こすとは思わない。あなたは正確なエラーメッセージを伝えることができますか? – PMF

+0

@PMFこんにちは、私は今私の質問に詳細を追加しました。 – JKay

+0

はDebug.Writeline(dynSum.ToString())でスローされた例外です。 – Eminem

答えて

2

例外は次のとおりです:

+0

こんにちは、今働いています。ありがとう!変換がうまくいき、Debug、Writelineで問題が発生しました。説明ありがとう。 – JKay

0

は、次の試してみてください

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

をそして、あなたは可能Debug.WriteLine入力をチェックするとき、 "ダイナミック" その一つではありません。 だから、たとえば文字列に、それをキャストする必要があります。

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

希望これは

*編集ができます: 文字列としてdynSum.ToString()について少し詳細を。 ToString()を使うだけで、まだ動的文字列が得られます。

var strForWriteLine = dynSum.ToString(); 

strForWriteLineのタイプは、ここでダイナミック

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

こんにちは、私はすでにこれを試して、私の質問に言及しました。 – JKay

11

です。すべての主旨、オブジェクトを文字列にシリアル化し、文字列を動的に逆シリアル化する。

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

あなたがJsonConvertを使用する必要がありますにオブジェクトを変換するために、拡張メソッドであるダイナミック{文字列}

関連する問題