我尝试将数据从winform datagridview发送到webapi,所以我将datagridview转换为json。当发送json时,它无法POST数据并发送此错误:
- *'无法POST数据:(错误请求):{“类型”:“https://tools.ietf.org/html/rfc7231#section-6.5.1“,“标题”:“出现一个或多个验证错误。",“状态”:400,“跟踪ID”:“00-fb 84 f3 c1 c1802 a481 cbe 7aba 7 ef 73193 - 80 be 6 fe 9 c57344 d2 -00”,“错误”:{"$":[“JSON值无法转换为LabDataApi. Models. LabData。路径:$|行号:0|行内字节位置:第421章我的天
代码:
public class LabData
{
public int SerialNumber { get; set; }
public string LabParameterName { get; set; }
public decimal LabValue { get; set; }
public DateTime LabDate { get; set; }
}
private void button2_Click(object sender, EventArgs e)
{
var url = "https://localhost:7248/api/Lab";
dataGridView1.DataSource = LabResult.GetLabData();
var table = JsonConvert.SerializeObject(dataGridView1.DataSource);
ApiSender apiSender = new ApiSender();
apiSender.POSTData(table, url);
}
public class ApiSender
{
private static HttpClient _httpClient = new HttpClient();
public bool POSTData(object json, string url)
{
using (var content = new StringContent(JsonConvert.SerializeObject(json), System.Text.Encoding.UTF8, "application/json"))
{
HttpResponseMessage result = _httpClient.PostAsync(url, content).Result;
if (result.StatusCode == System.Net.HttpStatusCode.Created)
return true;
string returnValue = result.Content.ReadAsStringAsync().Result;
throw new Exception($"Failed to POST data: ({result.StatusCode}): {returnValue}");
}
}
}
接收Json数据格式
[{“序列号”:1,“实验室参数名称”:“abc”,“实验室数值”:7.80,“实验室日期”:“2001-11- 16 T10:10:00”},{“序列号”:2,“实验室参数名称”:“xyz”,“实验室数值”:10.00,“实验室日期”:“2001-11- 16 T10:10:00”},{“序列号”:3,“实验室参数名称”:“qq”,“实验室数值”:5.00,“实验室日期”:“2001-03- 16 T10:10:00”},{“序列号”:18,“实验室参数名称”:“c
2条答案
按热度按时间kpbwa7wx1#
您正在尝试将
LabData
数组转换为LabData
模型。更新API以接收IEnumerable<LabData>
,或者更新客户端以发送多个POST
请求(针对每个LabData
条目(不推荐))。至少这是你所问问题的答案--看起来你已经切断了异常的结尾,也许你错误地遗漏了一些重要的细节?
xdyibdwo2#
转换为json时,对象定义有问题。另外,您可能希望将其作为List或Array获取。
序列化/反序列化将更好地处理这些对象。