2016-08-10 102 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"]; 
}