c# - 通过 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# 很好地支持匿名类型,因此您可以发出任何所需的 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();
推荐阅读
- django - django-crontab 一天后缺少哈希
- python - 替换打印语句中的单个字符
- sql - SQL Server 存储过程使用各种字段以及日期范围进行搜索
- c# - 蛮力算法仅打印 0
- python - OpenCV Python Windows:ImportError:DLL加载失败:找不到指定的模块
- yii2 - Yii2:ajax 发布请求总是重定向到登录页面
- vim - 属性前带有空格以使它们从同一列开始的代码格式的名称是什么?
- python - PySCIPOpt/SCIP - isLPSolBasic() 不在 pyscipopt.scip.Model 中
- c++-cli - C++ CLI 将数组传递给类
- python - 所以基本上 info() 命令不适用于由 pandas 直接拉出的表?