2016-08-10 99 views
0

我有一個簡單的按鈕,它運行一個腳本以從40個表中提取數據,在php內部這些以JSON編碼。在C中檢索多個JSON對象

$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 *它只是爲了方便閱讀。這顯示罰款作爲一個數組,但是當我拉數組到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; 

想法一 這可能是不好的做法,但可能我運行一個腳本爲每個表,然後就返回每個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#中的數組?我想理想地將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

的PHP有沒有HTML標記的一類,但你可以點我在正確的方向爲REST因爲我不想在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"]; 
}