首页 > 解决方案 > 通过 RestSharp C# 将 JSON 数组发布到 PHP API

问题描述

我正在使用 C# 制作一个应用程序,需要将 JSON 数组发布到我的 php api 文件中。我有这个代码:

        string JSONString = JsonConvert.SerializeObject(dt);
        var client = new RestClient(ipadress);
        var request = new RestRequest(apiendpoint, Method.POST);
        request.RequestFormat = DataFormat.Json;
        var body = new
        {
            key = apikey,
            items = JSONString               

        };
        request.AddJsonBody(body);
        var response = client.Post(request);
        var content = response.Content; // Raw content as string
        MessageBox.Show(content.ToString());

所以,问题是items = JSONString作为字符串而不是数组发送,并且 PHP API 文件没有将它作为数组输入(我不能从行中提取值)。我没有找到任何信息,我怎样才能在 RestSharp 中制作二级数组,比如(这只是虚构的代码,它不起作用:

var body = new
    {
        key = apikey,
        items = { 
           foreach(DataRow row in dt.Rows)
              {
                 aid = row["aid"].ToString(),
                 item= row["item"].ToString(),
                 desc= row["desc"].ToString()
              }
       }               

    };

我的 PHP api 文件(仅供参考,我正在使用框架):

$resultArray = array_map("html_entity_decode", $data);
foreach ($resultArray as $items) {
    $db->insert("test_items", ["aid"=>$items->aid, "item"=>$items->item, "desc"=>$items->desc]);
}
dnd($resultArray['items']);

标签: c#phparraysjsonrestsharp

解决方案


您可以这样做,C# 很好地支持匿名类型,因此您可以发出任何所需的 POCO 模式:

在编译时(严格的 API,已知所有属性,无需打开/关闭某些东西),我们这样做:

var body = new
    {
        key = apikey,
        items = dt
              .Rows
              .Cast<DataRow>() 
              .Select(x=> new
              {
                 aid = x["aid"].ToString(),
                 item= x["item"].ToString(),
                 desc= x["desc"].ToString()
              })
              .ToList()
       }
    };

在运行时(如果您的属性集仅在运行时已知),我们这样做:

dynamic body = new ExpandoObject();
body.key = apiKey;
body.items = dt
              .Rows
              .Cast<DataRow>() 
              .Select(x=> new
              {
                 aid = x["aid"].ToString(),
                 item= x["item"].ToString(),
                 desc= x["desc"].ToString()
              })
              .ToList();

推荐阅读