通过 RestSharp C# 将 JSON 数组发布到 PHP API
Posted
技术标签:
【中文标题】通过 RestSharp C# 将 JSON 数组发布到 PHP API【英文标题】:Posting JSON array to PHP API via RestSharp C# 【发布时间】:2021-10-01 07:02:37 【问题描述】:我正在使用 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']);
【问题讨论】:
【参考方案1】:您可以这样做,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();
【讨论】:
感谢您的回答,但它给我带来了错误:datarowcollection does not contain a definition for select
。谷歌搜索:) 此代码在 button_click 处执行。它从 dataGridView 获取数据,将 em 推送到 DataTable,我需要将其作为 JSON 发布到我的 PHP API
查看带有 Cast 的更新版本。此外,这里是 msdn 上的 ExpandoObject - docs.microsoft.com/en-us/dotnet/api/… 您只需要包含 System.Dynamic 和 System.Linq 命名空间。
是的,我想通了。但是代码现在将 NULL 发布到 API .. 将寻找原因 :) 谢谢您的帮助!
我没弄明白,datatable里面填满了数据,但是当我发布到API时,它显示```array(2) ["key"] => string(29) "XXX -XXX-XXX" ["项目"]=> NULL 以上是关于通过 RestSharp C# 将 JSON 数组发布到 PHP API的主要内容,如果未能解决你的问题,请参考以下文章
C# - OLAP TM1 的 JSON 正文参数 - 通过 RestSharp 进行补丁调用
c# JSON REST 响应通过 3 种不同的方法(WebRequest、RESTSharp、HttpClient)是空的,但 Postman 和浏览器可以工作
在 C# 中,如何为具有多个嵌套数组的 JSON 对象建模?