【问题标题】:Retrieving multiple JSON objects in C#在 C# 中检索多个 JSON 对象
【发布时间】:2016-08-10 14:20:13
【问题描述】:

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

【问题讨论】:

    标签: c# php json pdo


    【解决方案1】:

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

    您应该尝试直接从您的 C# 代码中获取这些数据(或)将这些方法公开为 Web API 方法(我的意思是 REST 服务)并从您的 C# 代码中调用它们以获取所需的数据。

    【讨论】:

    • php 没有 HTML 标记,但您能否为我指明 REST 服务的正确方向,因为出于安全原因,我不想在 C# 中调用数据。
    • 我的 JSON 返回也没有键,我可以使用键分隔值吗?
    • 你能发布var json的输出吗?
    • 请看问题
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 1970-01-01
      • 2012-03-04
      • 2020-06-08
      • 2015-01-19
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多