2017-07-17 7 views
1

私はさまざまな残りのapi jsonレスポンスの戻り値を比較しようとしています。クラス名を次のようにパラメータとして使用するメソッドを作成したいと考えています。私はstringとtypeof()として提出しようとしました。 ClassNameをパラメータとして渡す正しい方法が何であるか、あるいは私が別のアプローチをとるべきかどうかを知りたいと思います。クラス名をJsonConvert.DeserializeObjectにパラメータとして渡す

class Employee 
{ 
//different properties 
} 

class Patient 
{ 
//different properties 
} 

class Tests 
{ 
    public bool compareValues(ClassName) 
    { 
     string expectedValues = File.ReadAllText(filePath); 

     var expectedValues = JsonConvert.DeserializeObject<ClassName[]>(fileResult, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });   
       //similar thing: call rest api as above. 

     //compare logic 
    } 
} 

ありがとうございます!

+1

なぜGeneric引数で配列を使用していますか? –

答えて

1

ジェネリックスと呼ばれています。クラス名のプレースホルダー -

public bool compareValues<T>(ClassName) 
{ 
    string expectedValues = File.ReadAllText(filePath); 

    var expectedValues = JsonConvert.DeserializeObject<T[]>(fileResult, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });   
      //similar thing: call rest api as above. 

    //compare logic 
} 

var employeeResult = compareValues<Employee>(); 
var patientResult = compareValues<Patient>(); 

注メソッドシグネチャを変更し、それが<T>含ま:以下の例を参照してください。これは、あなたのメソッドでどのクラスが使われているかをすでに知っている場合に有効です。クラス名のみを文字列として使用する場合は、具体的なクラスJsonConvert.DeserializeObject(jsonString)を指定せずにjsonを逆シリアル化してJObjectと処理する必要があります(Json.Netのドキュメントを参照)。

+0

ありがとうございました!また、私はlike var orderValues = JsonConvert.DeserializeObject (fileResult、新しいJsonSerializerSettings(ContractResolver =新しいCamelCasePropertyNamesContractResolver()})OrderBy(o => o.ID).ToArray();のように注文したいと思います。私もIDとしてパラメータとして渡したいと思います。 – Jay

関連する問題