2016-08-10 8 views
0

У меня есть простая кнопка, которая запускает скрипт для извлечения данных из 40 таблиц, внутри php они закодированы в JSON.Извлечение нескольких объектов JSON в C#

$stmt = $pdo->prepare("SELECT* FROM form"); 
$stmt->execute(); 
$results=$stmt->fetchAll(PDO::FETCH_ASSOC); 
$form=$results; 

$stmt = $pdo->prepare("SELECT * FROM applicant"); 
$stmt->execute(); 
$results=$stmt->fetchAll(PDO::FETCH_ASSOC); 
$applicant=$results; 


print json_encode(array($form,$applicant)); 

Я не использую select * просто для удобства чтения. это отображается как массив, но когда im вытягивает массив в C#, это делается как строка, как передать массив с php на C#?

  WebClient wc = new WebClient(); 
      var json = wc.DownloadString("http://localhost/returnData.php"); 
      List<Applicant> app = JsonConvert.DeserializeObject<List<Applicant>>(json); 
      List <form> form = JsonConvert.DeserializeObject<List<form>>(json); 
      dataGrid.ItemsSource = form; 
      dataGrid2.ItemsSource = app; 

Идея 1 Это может быть плохой практикой, но может я запустить сценарий для каждой таблицы, а затем просто возвращать каждый объект JSON по отдельности, я знаю, что это будет работать, но будет ли это исполнение тяжелой и придется создать несколько сценариев.

[{"id":"1","name_id":"0","first":"advert","last":"","address":"","postcode":"2","date_created":"2016-08-09 15:50:12"},{"id":"2","name_id":"0","first":"advert","last":"","address":"","postcode":"2","date_created":"2016-08-09 16:25:04"}] 

Идея 2 я мог бы создать один сценарий, но вернуть все с сепаратором. например, print $form."^".$app;, затем разделите их на массив в C#?

Idea 3 Я бы в идеале хотел бы передать массив json массивов в C#.

ответ

2

Это wc.DownloadString("http://localhost/returnData.php") строка кода будет пытаться загрузить весь ресурс returnData.php который будет включать не только печатное массив JSON, но так же, что страницы HTML разметку и, таким образом, ваша десериализацию в JsonConvert.DeserializeObject<List<Applicant>>(json) логически должна потерпеть неудачу.

Вы должны попробовать и получить эти данные непосредственно из вашего кода на C# (OR), выставляя этот метод как метод Web API (я имею в виду службу REST) ​​и вызывать их из вашего кода C# для получения требуемых данных.

+0

РНР не имеет HTML-разметку, но не могли бы вы мне точку в правильном направлении для отдыха поскольку я не хочу вызывать данные на C# только по соображениям безопасности. – Bish25

+0

также мое возвращение JSON без ключа, могу ли я отделить значения с помощью ключа? – Bish25

+0

Можете ли вы опубликовать вывод 'var json'? – Rahul

0

Попробуйте это:

Пожалуйста, создайте класс, как это //Jsonget.cs

public static string jsonconvert(string url) 
{ 
string currentsite = HttpContext.Current.Request.Url.Authority; 
WebClient wc = new WebClient(); 
wc.Encoding = Encoding.UTF8; 
wc.Encoding = UTF8Encoding.UTF8; 
string test = "http://" + currentsite + url; 
var data = wc.DownloadString(test); 
string jsonresult = "{\"results\":" + data.ToString() + "}"; 
return jsonresult; 
} 

string jsonurl = ""; 
string getjsonresult = ""; 

getjsonresult = Jsonget.jsonconvert("http://localhost/returnData.php"); 
Newtonsoft.Json.Linq.JObject Result= Newtonsoft.Json.Linq.JObject.Parse(getjsonresult); 


foreach (var get_result in Result["results"]) 
{ 
string id= (string)get_result ["id"]; 
string name_id= (string)get_result ["name_id"]; 
} 
Смежные вопросы