2016-04-16 1 views
0

私は自分のAPIでリクエストを実行するDLLを作成しました。今私は(DLLから)は、DLLを実装するプログラムで使用されるオブジェクトの配列を返すjsonの応答を返す要求は、私は何をしたいです。今私は、このクラスをしました:オブジェクトの配列を作成するには?

public class Details 
{ 
    public string name { get; set; } 
    public string age { get; set; } 
} 

public class Info 
{ 
    public List<object> info { get; set; } 
} 

public class User 
{ 
    public Details details { get; set; } 
    public Info info { get; set; } 
} 

public class RootObject 
{ 
    public User user { get; set; } 
} 

私はこのような要求をデシリアライズ:

var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned"); 

今すぐJSONがユーザーのdetailsが含まれており、いくつかのケースでもinfo、私はを反復処理しますこのようにして:

foreach(var user in obj) 
{ 
    item.user.details.name; 
    //take some info (could not contain nothing) 
    foreach(var info in user.info.info) 
    { 
     info; //<- contains all the information 
    } 
} 

私が知りたいことは:オブジェクトのリストを作成するにはどうすればいいですか?特に、detailsinfoのプロパティを持つuserオブジェクトを返送したいと思います。 C#で可能であるならば、私は、誰かが私を助けることができる、知らない

user[0].details.name: //where 0 is the index of the user (php syntax) 

:結果は、オブジェクトをreiceve」原因はそれのを反復処理し、各オブジェクトのプロパティを読み取るために必要なオブジェクトの配列でなければなりませんこの目標を達成する?

+1

あなたはのリストが欲しいですすべてのユーザーオブジェクト?これを試してみてください: 'var users = obj.Select(x => x.user).ToArray();' –

答えて

3

お客様のjsonコンバータはList<RootObject>を返し、各RootObjectには1つのプロパティuserが含まれています。単純なLINQクエリをList<User>オブジェクトにList<RootObject>を変更します

var users = obj.Select(o => o.user).ToList(); 

各要素をusersに次にDetailsInfo性の両方で、Userあります。

これを使用する方法の例として、jsonからの変換を行い、そのメソッドでユーザーのリストを返すメソッドがあるとします。その方法は、次のようになります。

public List<User> GetUsersFromJson() 
{ 
    var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned"); 
    var users = obj.Select(o => o.user).ToList(); 
    return users; 
} 

をあなたは、ユーザーを反復処理することができ、このようなオブジェクト:C#で一般的に行われているよう

foreach (var user in users) 
{ 
    var detail = user.details; 
    var info = user.info; 
} 

あなたはcamel-caseにあなたのパブリックプロパティを変更することを検討すべきです。

+1

ちょっとした構文エラー: '>'を ')' –

+0

に置き換えて 'publicリスト '? – Dillinger

+0

Linqクエリ自体はメソッドではありません。コード内のどこにでも追加して変換を行うことができます。あなたがそれを埋め込む方法は、あなたのデザインに依存して、公的、私的、または何でもかまいません。 –

1

JsonConvert.DeserializeObject>は、RootObjectのリストを返します。 ToArray()メソッドを使用してリストを配列に変更することができます。

var obj = JsonConvert.DeserializeObject<List<RootObject>>("json returned"); 
RootObject[] array = obj.ToArray(); 

string s = array[0].user.details.name; 
object[] infos = array[0].user.info.info.ToArray(); 

と、このコードでは:この場合

foreach(var user in obj) 
{ 
    item.user.details.name; 
    //take some info (could not contain nothing) 
    foreach(var info in user.info.info) 
    { 
     info; //<- contains all the information 
    } 
} 

はSENSを持っていない、それはこのようにする必要があります:

foreach (RootObject elem in obj) 
{ 
    foreach (Info info in elem.user.info.info) 
    { 
     object[] localInfo = info.info.ToArray(); //<- contains all the information 
    } 
}