Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不工作的控制器中反序列化JSON_C#_Json_.net - Fatal编程技术网

C# 在不工作的控制器中反序列化JSON

C# 在不工作的控制器中反序列化JSON,c#,json,.net,C#,Json,.net,我在.Net Core(3.1)中有以下控制器方法: 在网络选项卡中,正在传递以下JSON: {"orders": [ {"product":"zzzz","ordertotal":"12"}, {"product":"xxxx","ordertotal":"23"} ]} 在控制器方法中,数据以nu

我在.Net Core(3.1)中有以下控制器方法:

在网络选项卡中,正在传递以下JSON:

{"orders":
[
    {"product":"zzzz","ordertotal":"12"},
    {"product":"xxxx","ordertotal":"23"}
]}
在控制器方法中,数据以null形式通过。我的猜测是它不能正确地反序列化它。有人知道为什么会这样吗?

两件事

  • OrderTotal
    就像一个字符串,您的模型需要十进制
  • 您需要的是订单的
    IEnumerable
    数组,但发送的对象包含带有数组的属性
  • 对于
    2
    ,您可以创建一个新的RequestModel,如

    public class OrderRequestModel
    {
        public IList<Order> orders { get; set; }
    }
    
    公共类OrderRequestModel
    {
    公共IList命令{get;set;}
    }
    
    并更改控制器签名,如

    public async Task<ActionResult> UpdateOrders([FromBody]OrderRequestModel order)
    
    公共异步任务

    两件事

  • OrderTotal
    就像一个字符串,您的模型需要十进制
  • 您需要的是订单的
    IEnumerable
    数组,但发送的对象包含带有数组的属性
  • 对于
    2
    ,您可以创建一个新的RequestModel,如

    public class OrderRequestModel
    {
        public IList<Order> orders { get; set; }
    }
    
    公共类OrderRequestModel
    {
    公共IList命令{get;set;}
    }
    
    并更改控制器签名,如

    public async Task<ActionResult> UpdateOrders([FromBody]OrderRequestModel order)
    

    公共异步任务

    好的,这里有一些问题:

    您的身体应该是这样的,以便与您的模特相匹配:

    {"orders":
     [
        {"product":"zzzz","orderTotal":12},
        {"product":"xxxx","orderTotal":23}
    ]}
    
    或:

    您应该使用以下方法定义对象,以便能够正确地反序列化对象:

    public partial class Order
    {
        [JsonProperty("product")]
        public string Product { get; set; }
    
        [JsonProperty("ordertotal")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long Ordertotal { get; set; }
    }
    

    在任何情况下,最好使用
    OrderTotal
    而不是
    OrderTotal
    好的,这里有一些问题:

    您的身体应该是这样的,以便与您的模特相匹配:

    {"orders":
     [
        {"product":"zzzz","orderTotal":12},
        {"product":"xxxx","orderTotal":23}
    ]}
    
    或:

    您应该使用以下方法定义对象,以便能够正确地反序列化对象:

    public partial class Order
    {
        [JsonProperty("product")]
        public string Product { get; set; }
    
        [JsonProperty("ordertotal")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long Ordertotal { get; set; }
    }
    

    在任何情况下,最好使用
    OrderTotal
    而不是
    OrderTotal

    什么是
    null
    ?事实上,
    OrderTotal
    的名称和类型是不同的。您也不希望在引号中包装数字,这不是一个具有属性“orders”的对象这是一个订单列表,而不是列表本身?什么是
    null
    ?事实上,
    ordertotal
    的名称和类型不同。您也不希望将数字包装在引号中这不是一个具有属性“Orders”的对象,它本身是订单列表而不是列表吗?