如何在c#中解析json列表

Sez*_*gan 3 c# json asp.net-web-api

如何在 c# 解析这个 json 列表?我在我的服务端阅读了这个列表。我使用 web api。

[
{ "Id":1,
  "Adjustment":{
    "CardNumber": "1234567895678",
    "TimeStamp": "2016-06-14 12:00:56",
    "Point": -13.09
    }
},
{ "Id":2,
  "Adjustment":{
    "CardNumber": "2345673245689",
    "TimeStamp": "2016-06-14 12:05:43",
    "Point": 2.3
    }
}
] 
Run Code Online (Sandbox Code Playgroud)

我这样做了,但它不起作用:如何修复我的代码?你有什么建议吗?我发送给 Fiddler 请求正文。

public object InsertNewCustomer([FromBody] object value)
{
    var returns = new List<object>();

    if (value == null)
    {
        returns.Add(new { ReturnCode = "-1" });

        return Json(returns, JsonRequestBehavior.AllowGet).Data;
    }
    var jsonstr = @value.ToString();

    var jsonVal = JArray.Parse(jsonstr);



    Cariler newcustomer = new Cariler();

    using (TransactionScope scope = new TransactionScope())
    {

        foreach (JObject root in jsonVal)
        {
            foreach (KeyValuePair<String, JToken> app in root)
            {

                var card = (String)app.Value["CardNumber"];
                var time = (String)app.Value["TimeStamp"];
                var point = (byte)app.Value["Point"];

                newcustomer.CardNum = card;
                newcustomer.Time = time;
                newcustomer.Point = point;
                context.Cariler.Add(newcustomer);
                context.SaveChanges();
            }
        }


        scope.Complete();
        returns.Add(new { ReturnCode = "0" });

        return Json(returns, JsonRequestBehavior.AllowGet).Data;
    }
}
Run Code Online (Sandbox Code Playgroud)

给出这个错误:

{"Message":"发生错误。","ExceptionMessage":"无法访问 Newtonsoft.Json.Linq.JValue 上的子值。","ExceptionType":"System.InvalidOperationException","StackTrace":" 在 Newtonsoft .Json.Linq.JToken.get_Item(Object key)\r\n at TestWebApi.Controllers.ValuesController.InsertNewCustomer(Object value) in c:\Users\sezer.erdogan.PROMAKS\Desktop\LYLWebApi\LYLWebApi\Controllers\ValuesController。 cs:line 64\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.b__9(Object instance, Object[] methodParameters) \r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(对象实例,Object[] 参数)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 从上一个引发异常的位置的堆栈跟踪结束---\r\n在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()\r\n--- 从上一个引发异常的位置的堆栈跟踪结束---\r\n在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() \r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"}

BWA*_*BWA 6

json2csharp.com 上,您可以为您的 JSON 生成类,对于您的 JSON,它们可能如下所示:

public class Adjustment
{
    public string CardNumber { get; set; }
    public string TimeStamp { get; set; }
    public double Point { get; set; }
}

public class RootObject
{
    public int Id { get; set; }
    public Adjustment Adjustment { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后反序列化它:

List<RootObject> o = JsonConvert.DeserializeObject<List<RootObject>>(string json)
Run Code Online (Sandbox Code Playgroud)

  • 这也可以在 Visual Studio 中完成:Edit -&gt; Paste Special -&gt; Paste JSON as Classes (2认同)