var custsType = Type.GetType("Customers");
var customers = JsonConvert.DeserializeObject(data, custsType);
問題は、使用して難しさを持っているつもりだということです型が不明な場合はオブジェクトを返します。おそらくタイプ名は、パラメータでありそうでない場合、あなたはそれがコンパイル時に、あなたはこれを返すことを期待どのタイプか分からないことを示唆している
var customers = JsonConvert.DeserializeObject<Customers>(data);
行っているでしょう。その問題は、コンパイル時に型が分からなければ、取得したオブジェクトで何ができるかがはっきりしないことです。
オブジェクトのプロパティにアクセスする場合は、そのオブジェクトの種類を前提にいくつかの前提を設定する必要があります。それ以外の場合は、逆シリアル化されたオブジェクトがそのプロパティを持つことは期待できません。
挑戦は問題を解決する方法ではなく、最初に問題がないようにアプローチを再考する方法です。
理想的には、再びこのようになります。これは、あなたがコンパイル時に予想されるタイプを知りたい:データが予想される型に直列化復元できない場合
var customers = JsonConvert.DeserializeObject(data, custsType);
はその後、それが例外をスローします発信者はに合っている必要があります。
a)あなたはそのタイプがわからない、またはb)反射を使用してプロパティを見つけなければならない場合、何かが間違っていて、それを修正することができます。
var name = myObject["Name"];
が反射よりも簡単ですが、それは最終的にあなたが本当に知らないの両方のケースで
var property = myObject.GetType().GetProperty("Name");
var name = property.GetValue(myObject);
と同じことだ。このようなプロパティにアクセスしようとすると
「名前」プロパティが存在するかどうかを判定します。オブジェクトをJSONに解析するには、シーンの裏側で反射を使用するだけです。
私はこれがあなたが探している重複かもしれないと思う:https://stackoverflow.com/a/1606988/424129 –
コンパイル時に型がわからないので、* customerとして使用することはできません.Name *動的に処理する必要があります。それから、(Json.Net) 'var jobj = JObjectを使うだけです。Parse(jsonstr); '' jobj ["name"] 'のようなプロパティを使います。 –
*参照されたSOの投稿を使用しても強いタイプは返されません。動的オブジェクトのみ* - 実際これは間違っています。 [参照される回答](https://stackoverflow.com/a/32371686/3744182)では、JSONは要求された型のオブジェクトに逆シリアル化されますが、戻り値のシグネチャが 'object'であるメソッドによって返されます。すべてのC#オブジェクトの基本型。詳細については、[newtonsoft docs](https://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject_2.htm)を参照してください。 – dbc