winforms 将json发送到.net 6 Web API时出现400(错误请求)

mftmpeh8  于 2022-11-17  发布在  .NET
关注(0)|答案(2)|浏览(147)

我尝试将数据从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

kpbwa7wx

kpbwa7wx1#

The JSON value could not be converted to LabDataApi.Models.LabData

您正在尝试将LabData数组转换为LabData模型。更新API以接收IEnumerable<LabData>,或者更新客户端以发送多个POST请求(针对每个LabData条目(不推荐))。
至少这是你所问问题的答案--看起来你已经切断了异常的结尾,也许你错误地遗漏了一些重要的细节?

xdyibdwo

xdyibdwo2#

转换为json时,对象定义有问题。另外,您可能希望将其作为List或Array获取。
序列化/反序列化将更好地处理这些对象。

public class LabDatas
{
    public LabData[] Value { get; set; }
}

//or if you want list
public class LabDatas
{
    public List<LabData> Value { get; set; }
}

public class LabData
{
    public int SerialNumber { get; set; }
    public string LabParameterName { get; set; }
    public float LabValue { get; set; }
    public DateTime LabDate { get; set; }
}

相关问题