2017-04-07 18 views
0

私はビーコン情報をエンキューするためにcouchbaseキューを使用しています。私は私のgetメソッドのためのn1qlクエリを使用しようとしていると私はすべての情報を取得することに問題があります。 result.RowsはBeaconInfoN1qlの配列である1つの要素を返すので、最初のビーコンエントリのみを取得していることに気付きました。私はその配列を反復し、それぞれをリストに追加したいと思っていました。n1qlクエリからJSON配列を反復処理する方法は?

try { 
    var cluster = new Cluster(new ClientConfiguration()); 
    using (var bucket = cluster.OpenBucket("BeaconInfoN1ql")) 
    { 
     string query = "SELECT * FROM `BeaconInfoN1ql`"; 
     var queryRequest = new QueryRequest(query); 
     var result = bucket.Query<dynamic>(queryRequest); 
    foreach (var row in result.Rows) 
     { 

      int i = 0; 
      var beacon = new Beacon() 
      { 
       SerialNumber = row.BeaconInfoN1ql[i].serialNumber, 
       ReceivedDate = Convert.ToDateTime(row.BeaconInfoN1ql[i].receivedDate), 
       ReceiverId = row.BeaconInfoN1ql[i].receiverId, 
       Distance = Convert.ToDouble(row.BeaconInfoN1ql[i].distance), 
       Rssi = Convert.ToInt32(row.BeaconInfoN1ql[i].rssi), 
       NewDistance = Convert.ToDouble(row.BeaconInfoN1ql[i].newDistance), 
       DistanceTesting = Convert.ToDouble(row.BeaconInfoN1ql[i].distanceTesting), 
      }; 
      i++; 
      _beaconsList.Add(beacon); 
     } 
} 
return _beaconsList; 

私result.Rowsこの

result.Rows =

{{ 
"BeaconInfoN1ql": [ 
{ 
"distance": 2.2705747109792007, 
"distanceTesting": 22, 
"newDistance": 22, 
"receivedDate": "0001-01-01T00:00:00", 
"receiverId": "42008780c4b9b329", 
"rssi": -73, 
"serialNumber": "888" 
}, 
{ 
"distance": 2.2705747109792007, 
"distanceTesting": 22, 
"newDistance": 22, 
"receivedDate": "0001-01-01T00:00:00", 
"receiverId": "42008780c4b9b329", 
"rssi": -73, 
"serialNumber": "888" 
}, 
{ 
"distance": 2.2705747109792007, 
"distanceTesting": 22, 
"newDistance": 22, 
"receivedDate": "0001-01-01T00:00:00", 
"receiverId": "42008780c4b9b329", 
"rssi": -73, 
"serialNumber": "888" 
}, 
{ 
"distance": 2.2705747109792007, 
"distanceTesting": 22, 
"newDistance": 22, 
"receivedDate": "0001-01-01T00:00:00", 
"receiverId": "42008780c4b9b329", 
"rssi": -73, 
"serialNumber": "888" 
}, 
] 
}} 

は、私はすべてのキーを反復処理する/ループための第二のforeachを作成する方法についてはよく分からないように見えます。

答えて

0

JSONを反復するために、私はダイナミクスを使いたいです。ここでは例です:

var result = new Result() 
{ 
    Rows = @"{ 
     'BeaconInfoN1ql': [ 
      { 
       'distance': 2.2705747109792007, 
       'distanceTesting': 22, 
       'newDistance': 22, 
       'receivedDate': '0001-01-01T00:00:00', 
       'receiverId': '42008780c4b9b329', 
       'rssi': -73, 
       'serialNumber': '888' 
      } 
     ] 
    }" //other entries omitted for brevity 
}; 

dynamic parsedRows = JsonConvert.DeserializeObject(result.Rows); 
foreach (var entry in parsedRows.BeaconInfoN1ql) 
    Debug.Write(entry.distance); 

注:私は私の例では、あなたの出力から、二重中括弧を処分しました。

+0

私はそれを試みました、私はresult.Rowsをdeserializeすることはできません、それはSystem.Collections.Generic.List に文字列を与えます。理由の1つは、おそらくジャソンに2つの括弧があるからだと思います。結果がiQueryResult であり、分割機能がないためsplit()を使用できません。 – Iamasking88

関連する問題