在c#中检索多个JSON对象

本文关键字:JSON 对象 检索 | 更新日期: 2023-09-27 18:01:49

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

想法一这可能是不好的做法,但我可以为每个表运行一个脚本,然后单独返回每个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"}]

想法二我可以创建一个脚本,但返回所有与分隔符。例如print $form."^".$app;,然后将它们分割成c#中的数组?

想法三理想情况下,我想将json数组传递给c#。

在c#中检索多个JSON对象

wc.DownloadString("http://localhost/returnData.php")代码行将尝试下载整个资源returnData.php,这不仅包括打印的JSON数组,而且还包括页面HTML标记,因此您对JsonConvert.DeserializeObject<List<Applicant>>(json)的反序列化在逻辑上应该失败。

你应该尝试直接从你的c#代码(或)暴露这些方法作为Web API方法(我的意思是REST服务),并从你的c#代码调用它们来获得所需的数据。

Try this:

请创建一个这样的类//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"];
}