2017-12-15 18 views
0

私はリストビューにデータを追加しようとしていますが、APIの返すjsonデータを使用しています。リストの構造を持つクラスがありますが、forループを使用してデータを追加しようとすると、失敗し、それを追加しない場合、ループを一度実行してからループを終了します。リストを期待で、それは0リストビューへのjsonデータの追加

ListAvivity.csのカウント

dynamic mFarms = JsonConvert.DeserializeObject(content); 

List<MyList.Data> mItems = new List<FarmsList.Data>(); 

foreach(var items in mFarms.data) 
{ 
    mItems.Add(new MyList.Data() {FarmID = items["FarmID"].ToString(), FarmerSurname = items["FarmerSurname"].ToString(), 
       FarmerForename = items["FarmerForename"].ToString(), FarmName = items["FarmName"].ToString()}); 
} 

MyList.cs

public class MyList 
{ 
    public class Data 
    { 
     public int FarmID { get; set; } 
     public string FarmName { get; set; } 
     public string FarmerSurname { get; set; } 
     public string FarmerForename { get; set; } 
    } 

    public class RootObject 
    { 
     public int code { get; set; } 
     public string status { get; set; } 
     public string message { get; set; } 
     public Data data { get; set; } 
    } 

} 

JSONデータを持っている

{ 
"code": 201, 
"status": "Success", 
"message": "Object found", 
"data": [ 
    { 
     "FarmID": 1, 
     "FarmName": "Test1", 
     "FarmerSurname": "Test", 
     "FarmerForename": "Test" 
    }, 
    { 
     "FarmID": 2, 
     "FarmName": "Test2", 
     "FarmerSurname": "Test", 
     "FarmerForename": "Test" 
    } 
    ] 
} 
+0

'それは失敗し、それを追加しません。間違いはありますか?それは何ですか? – Equalsk

+0

何も一度だけ試してからスキップするものはありません –

+0

あなたが表示した例は私のためにうまくいきます。予想どおりに2回ループし、正しくデータを読み込みます。 – Equalsk

答えて

1

プログラムが入力されていませんjsonオブジェクトをデシリアライズできなかったためです。 dynamicの代わりに既知の型として逆シリアル化することをお勧めします。

jsonクラスを作成します。

public class Datum 
{ 
    public int FarmID { get; set; } 
    public string FarmName { get; set; } 
    public string FarmerSurname { get; set; } 
    public string FarmerForename { get; set; } 
} 

public class Content 
{ 
    public int code { get; set; } 
    public string status { get; set; } 
    public string message { get; set; } 
    public List<Datum> data { get; set; } 
} 

次に、それを逆シリアル化します。

var mFarms = JsonConvert.DeserializeObject<Content>(content); 
List<MyList.Data> mItems = new List<FarmsList.Data>(); 

foreach(var items in mFarms.data) 
{ 
    mItems.Add(new MyList.Data() {FarmID = items["FarmID"].ToString(), FarmerSurname = items["FarmerSurname"].ToString(), 
       FarmerForename = items["FarmerForename"].ToString(), FarmName = items["FarmName"].ToString()}); 
} 

また、mItemsを印刷するには、ループを作成します。

foreach (var mitem in mItems) 
{ 
    Console.WriteLine(mitem.FarmID); 
    Console.WriteLine(mitem.FarmerSurname); 
    //etc 
} 
+0

提供されたJSONは絶対に「動的」型に逆直列化され、ループは正常に動作します。 – Equalsk

+0

はい、私はダイナミックに問題はありませんでした。しかし、私が言ったように、既知のタイプを使う方が良いかもしれません。 – lucky

+0

はい、これは理想的ですが、OPが動的かどうか、またはクラスに逆シリアル化されているかどうかに関係しないので、質問には答えません。 – Equalsk

関連する問題