我正在尝试将一个字符串形式的json对象从前端转换到中间层。我正在使用NewtonSoft.Json.JsonConvert.DeserializeObject.我没有收到任何错误。但是,当我设置断点时,我看到函数在调用反序列化时退出。它不会继续进行。这是我的代码。
public class tranx
{
public Transaction transaction { get; set; }
public List<LineItem> lineItems { get; set; }
}
[HttpGet]
public ActionResult saveTransaction(string transactionJson)
{
tranx t = JsonConvert.DeserializeObject<tranx>(transactionJson);
foreach (LineItem i in t.lineItems)
{
if (i != null)
{
Console.Write(i.CategoryID);
}
}
return View();
}注意: Transaction和LineItem也是我定义的对象,可以访问。
我不确定为什么代码在foreach循环之前退出。有什么想法吗?
下面是json字符串:
{
"transaction":[
{
"entityID":"",
"date":"2018-05-28"
}
],
"lineItems":[
{
"category":"",
"subCategory":"",
"amount":"",
"tax":0,
"description":"",
"miles":"",
"gallons":""
},
{
"category":"",
"subCategory":"",
"amount":"",
"tax":0,
"description":"",
"miles":"",
"gallons":""
}
]
}另外,我没有使用任何自定义的反序列化程序。
发布于 2018-05-29 00:28:56
我相信实际发生的情况是抛出了一个这样的异常:
未处理的异常: Newtonsoft.Json.JsonSerializationException:无法将当前JSON数组(例如1,2,3)反序列化为类型“Transaction”,因为该类型需要JSON对象(例如{"name":"value"})才能正确反序列化。
这是由于您的JSON将transaction属性指定为数组:
日期“事务”:{“entityID”:“”,“
”:“2018-05-28”}
..。而您的transaction属性只是一个Transaction。
下面的示例代码展示了这一点--只需将示例JSON放在test.json中
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
public class tranx
{
public Transaction transaction { get; set; }
public List<LineItem> lineItems { get; set; }
}
public class LineItem { }
public class Transaction { }
class Program
{
static void Main()
{
string json = File.ReadAllText("test.json");
tranx t = JsonConvert.DeserializeObject<tranx>(json);
}
}因此,您有两个问题需要解决:
tranx类需要更改,以便它的transaction属性是列表或数组,例如通讯录事务{ get;set;}
我还强烈建议您遵循.NET命名约定,其中属性和类型名称都是大写的。您可以使用JSON属性来指定如何在[JsonProperty]中表示值,如果这是以前属性为小写的原因。
https://stackoverflow.com/questions/50570115
复制相似问题