Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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/2/unit-testing/4.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时System.ArgumentNullException_C#_.net_Json_Json.net_.net Core - Fatal编程技术网

C# 在控制器中解析Json时System.ArgumentNullException

C# 在控制器中解析Json时System.ArgumentNullException,c#,.net,json,json.net,.net-core,C#,.net,Json,Json.net,.net Core,我是C和DotNet新手,如果这是一个非常基本的问题,我很抱歉。我正在通过Postman向我的应用程序发送一些Json: [ { "id": 5, "name": "Book", "price": 12.49, "import": false, "exempt": true }] 返回此错误: System.ArgumentNullException: Value cannot be null.
Parameter na

我是C和DotNet新手,如果这是一个非常基本的问题,我很抱歉。我正在通过Postman向我的应用程序发送一些Json:

[
{
    "id": 5,
    "name": "Book",
    "price": 12.49,
    "import": false,
    "exempt": true
}]
返回此错误:

System.ArgumentNullException: Value cannot be null.
Parameter name: s
   at System.IO.StringReader..ctor(String s)
   at Newtonsoft.Json.Linq.JArray.Parse(String json, JsonLoadSettings settings)
   at StoreFront.Controllers.StoreFrontController.Post(String product) in C:\Users\adamg\source\repos\StoreFront\StoreFront\Controllers\StoreFrontController.cs:line 43
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextActionFilterAsync>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeInnerFilterAsync>d__14.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeNextResourceFilter>d__22.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeFilterPipelineAsync>d__17.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.<InvokeAsync>d__15.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext()
以下是我的控制器Post方法:

[HttpPost]
    public IActionResult Post([FromBody]string product)
    {
        JArray order = JArray.Parse(product);

        IList<Order> Order = order.Select(p => new Order
        {
            Total = (Double)p["Price"],

        }).ToList();

        _context.Order.Add(Order[0]);

        return Ok(order);
    }

谢谢你的帮助

至少在.NET Framework 4.5.2中,以下内容可以工作:

var expectedResults = JsonConvert.DeserializeObject<List<OrderDto>>(product);

希望这也适用于您。

JSON区分大小写

Total = (Double)p["Price"],    // does not exist
Total = (Double)p["price"],    // ok

&xD&xA;只是换行符=CR LF,如果这有助于使错误消息更有意义的话?哪一个是StoreFrontController第43行?订单的类定义是什么?如果您在Post方法的第1行设置了断点,您能确认json字符串是正确的吗?另外,您正在使用的ASP.NET MVC和.NET Framework的版本是什么?嘿,Oder只是一个ID和一个双倍总数。我基本上只是试图从Json对象中定价,并在这一点上计算订单总数。稍后我将添加更多逻辑。我目前正在使用.NET Core 2。你能发布产品参数的值吗?嘿,我之前尝试过,但不幸的是,在.NET Core 2中似乎不起作用。嘿,我尝试过修补这个案例,但似乎没有帮助。
Total = (Double)p["Price"],    // does not exist
Total = (Double)p["price"],    // ok