我有一个简单的按钮,它运行一个脚本来从40个表中提取数据,在php中这些是用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;
创意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#中的数组?
创意3 我最好将json数组的数组传递给c#。
答案 0 :(得分:2)
该wc.DownloadString("http://localhost/returnData.php")
代码行将尝试下载整个资源returnData.php
,该资源不仅包括打印的JSON数组,还包含该页面HTML标记,从而在逻辑上对JsonConvert.DeserializeObject<List<Applicant>>(json)
进行反序列化应该失败。
您应该尝试直接从C#代码中获取这些数据(OR)将这些方法公开为Web API方法(我的意思是REST服务),并从C#代码中调用它们以获取所需的数据。
答案 1 :(得分: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"];
}