2017-01-29 4 views
0

私はJSONを解析するためのNewtonsoftライブラリを使用しています:JSONデータリストに<T>ショーのDataGridViewを行う方法

using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

私はJSON文字列と「MyClassの」クラスを持っています。

JSON文字列:

{ 
    "Result":  
      {  
       "MyClassList": [  
           {"Id":1,"Amount":"5,00"},  
           {"Id":2,"Amount":"10,00"},         
           {"Id":3,"Amount":"20,00"},  
           {"Id":4,"Amount":"25,00"}  
          ]  
       "ReturnValues":   
          { 
           "ErrorCode":1, 
           "ErrorDescription":"Successful" 
          } 
      } 
} 

私のクラス:

public class MyClass 
{ 
    [JsonProperty("Id")] 
    Int64 Id { get; set; } 

    [JsonProperty("Amount ")] 
    string Amount { get; set; } 
} 

私は、これらのクラス "GetMyClassList"、 "RootObject" と "ReturnValues" を使用してJSONデータを取得しています。

List<MyClass> GetMyClassList() 
{ 
    JObject jo = new JObject(); 
    List<MyClass> myClassList = new List<MyClass>(); 
    jo.Add("Name", "Name"); 
    jo.Add("Surname", "Surname"); 
    url = "MyUrl"; 

    string responseText = ExecuteHttpRequest(url , "POST", 
      "application/json", Encoding.UTF8.GetBytes(jo.ToString()), 3000); 

    myClassList = JsonConvert.DeserializeObject<RootObject>(responseText) 
        .GetMyClassListResult.MyClassList; 

    return myClassList; 
} 


public class ReturnValues 
{ 
    public int ErrorCode { get; set; } 
    public string ErrorDescription { get; set; } 
} 

public class GetMyClassListResult 
{ 
    [JsonProperty("MyClassList")] 
    public List<MyClass> MyClassList { get; set; } 
    public ReturnValues ReturnValues { get; set; } 
} 

public class RootObject 
{ 
    public GetMyClassListResult GetMyClassListResult { get; set; } 
} 

このデータ配列(IDと量)を取得できません。 と私はこのデータを取って、それをdataGridViewで表示したいと思います。

+0

JSONをオンラインコンパイラに貼り付けただけで、コンマが見つかりませんでした。 '、'配列の後ろに - >ウェブ上で間違っているのか、間違ってWEB APIから戻ってきたのですか? – Tatranskymedved

+0

JSONデータは定期的です。私はdataGridView "MyClassList"と "ReturnValues"を表示することができますが、 "ID":1と "Amount": "5,00"をdataGridViewに表示します。 –

+0

また、 '[JsonProperty(" Amount ")]'の後ろにスペースがあります。 – Tatranskymedved

答えて

0

これを実行する最善の方法は、ブレークポイントを行に設定することです。ここでは、メソッドの結果が取得されます。このライン:

return myClassList; 

私は、単一の調整であなたのコードを実行している - >私は(ないウェブから)直接JSONを使用していた - 以下のコードを。これは問題なく実行され、JSONから解析されたすべての結果を見ることができます。

問題がJSONであるか、データをDataGridTable(コードにはまったく含まれていないコード)に設定する必要があります。

class Program 
{ 
    static void Main(string[] args) 
    { 

     var result = new Program().GetMyClassList(); 

     foreach (var item in result) 
      Console.WriteLine($"ID: {item.Id}\tAmount:{item.Amount}"); 

     Console.ReadKey(); 
    } 

    public List<MyClass> GetMyClassList() 
    { 
     List<MyClass> myClassList = new List<MyClass>(); 

     string responseText = "{\"GetMyClassListResult\":{\"MyClassList\":[{\"Id\":1,\"Amount\":\"5,00\"},{\"Id\":2,\"Amount\":\"10,00\"},{\"Id\":3,\"Amount\":\"20,00\"},{\"Id\":4,\"Amount\":\"25,00\"}],\"ReturnValues\":{\"ErrorCode\":1,\"ErrorDescription\":\"Successful\"}}}"; 

     myClassList = JsonConvert.DeserializeObject<RootObject>(responseText) 
         .GetMyClassListResult.MyClassList; 

     return myClassList; 
    } 
} 

public class MyClass 
{ 
    [JsonProperty("Id")] 
    public Int64 Id { get; set; } 

    [JsonProperty("Amount")] 
    public string Amount { get; set; } 
} 

public class ReturnValues 
{ 
    public int ErrorCode { get; set; } 
    public string ErrorDescription { get; set; } 
} 

public class GetMyClassListResult 
{ 
    [JsonProperty("MyClassList")] 
    public List<MyClass> MyClassList { get; set; } 
    public ReturnValues ReturnValues { get; set; } 
} 

public class RootObject 
{ 
    public GetMyClassListResult GetMyClassListResult { get; set; } 
} 
+0

myClassList = JsonConvert.DeserializeObject (responseText) .GetMyClassListResult.MyClassList;この行のエラー。エラー:追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 –

関連する問題