2016-11-18 10 views
0

JSON応答にはデータベースAPIがあります。JSON応答から値を取得する方法

私のJSONデータ:私は別の変数で、この応答値を格納したい

{ 
    "AccessToken":"1929c63a-9c72-4c0d-aea8-345c0b5411e9", 
    "LoggedInUserID":1, 
    "LookupData":{ 
     "LiquiditySources":[ 
      { 
       "ID":1, 
       "ParentID":null, 
       "Name":"testname1", 
       "SequenceNo":null, 
       "Caption":"test1", 
       "ConnectivityInfo": 
        "{\"Port\":11111,\"Username\":testuser1,\"Password\":\"password1\"}" 
      }, 
      { 
       "ID":2, 
       "ParentID":null, 
       "Name":"testname2", 
       "SequenceNo":null, 
       "Caption":"test2", 
       "ConnectivityInfo": 
        "{\"Port\":22222,\"Username\":testuser2,\"Password\":\"password2\"}" 
      } 
     ] 
    } 
} 

は、誰もが、これが私の最後の年のプロジェクトで私を助けてください。私はWindowsアプリケーションを使用しています。#

+0

多分これはあなたを助けることができる - http://stackoverflow.com/を質問/ 6620165/how-can-i-parse-json-with-c – smoksnes

+0

無効なjson、少なくとも正しいjsonを提供してください – mybirthname

+0

thi sが解析されたjsonデータです –

答えて

1

このJSONをクラスにデシリアライズして、クラスオブジェクトで必要なものを実行してください。

この目的でNewtonSoft.Json dllを使用できます。

public class LiquiditySource 
{ 
    public int ID { get; set; } 
    public object ParentID { get; set; } 
    public string Name { get; set; } 
    public object SequenceNo { get; set; } 
    public string Caption { get; set; } 
    public string ConnectivityInfo { get; set; } 
} 

public class LookupData 
{ 
    public List<LiquiditySource> LiquiditySources { get; set; } 
} 

public class SampleClass 
{ 
    public string AccessToken { get; set; } 
    public int LoggedInUserID { get; set; } 
    public LookupData LookupData { get; set; } 
} 

string json = "your json string"; 
SampleClass obj = JsonConvert.DeserializeObject<SampleClass>(json); 

次のようなプロパティを取得することができます:

List<LiquiditySource> ls = obj.LookupData.LiquiditySources; 
    foreach(LiquiditySource liquiditySource in ls) 
    { 
     string connectivityInfo = liquiditySource.ConnectivityInfo; 

    } 

あなただけのすべてのConnectivityInfoの値を取得したい場合は、あなたもLINQを使用することができます。あなたがオブジェクトとそのプロパティを取得するためにdeserilize connectivityInfo文字列をfurthurしたい場合

List<string> lsConnectivityInfo = obj.LookupData.LiquiditySources.Select(c => c.ConnectivityInfo).ToList(); 

、その後は再びオブジェクトにデシリアライズする必要があります。 注:JSONも変更する必要があります。

修正JSON:

{ 
    "AccessToken": "1929c63a-9c72-4c0d-aea8-345c0b5411e9", 
    "LoggedInUserID": 1, 
    "LookupData": { 
     "LiquiditySources": [{ 
      "ID": 1, 
      "ParentID": null, 
      "Name": "testname1", 
      "SequenceNo": null, 
      "Caption": "test1", 
      "ConnectivityInfo": "{\"Port\":11111,\"Username\":\"testuser1\",\"Password\":\"password1\"}" 
     }, { 
      "ID": 2, 
      "ParentID": null, 
      "Name": "testname2", 
      "SequenceNo": null, 
      "Caption": "test2", 
      "ConnectivityInfo": "{\"Port\":22222,\"Username\":\"testuser2\",\"Password\":\"password2\"}" 
     }] 
    } 
} 

1つの以上のクラスを作成します。

public class ConnectivityInfo 
{ 
    public int Port { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

次に、この操作を行います。

foreach (LiquiditySource liquiditySource in ls) 
    { 
     string connectivityInfo = liquiditySource.ConnectivityInfo; 
     ConnectivityInfo connectivityInfoObj = JsonConvert.DeserializeObject<ConnectivityInfo>(connectivityInfo); 

    } 
+0

あなたは[json2csharp.com](http://json2csharp.com/)がクラスを生成するのを忘れた –

+1

これを行うことができる他のユーティリティもありますが、これは私が言及していないコードの一部ではありませんでした;) –

+0

私は他の値を持っていますが、どうすればConnectivityInfoの値を取得できますか? –

関連する問題