在C#中检索多个JSON对象

时间:2016-08-10 14:20:14

标签: c# php json pdo

我有一个简单的按钮,它运行一个脚本来从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#。

2 个答案:

答案 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"];
}