2017-04-07 5 views
0

그래서 내 표지 정보를 큐에 넣기 위해 couchbase 대기열을 사용하고 있습니다. 내 get 메서드에 대해 n1ql 쿼리를 사용하려고하는데 모든 정보를 가져 오는 데 문제가 있습니다. result.Rows가 BeaconInfoN1ql의 배열 인 하나의 요소를 반환하기 때문에 첫 번째 신호 항목 만 가져 오는 것을 알게되었습니다. 그 배열을 반복하고 각각을 목록에 추가하고 싶었습니다. 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

{{ 
"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 문을 만드는 방법에 대한 확실하지 않다 =이

result.Rows처럼 보인다 .

답변

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

나는 그것을 시도했다. 나는 결과를 deserialize 할 수 없다. Rows, System.Collections.Generic.List 을 string에 준다. 이유 중 하나는 json이 두 개의 괄호 '{{' '하나가 아니기 때문에? 결과가 iQueryResult 이고 분할 함수가 없기 때문에 split()을 사용할 수 없습니다. – Iamasking88