使用Newtonsoft c#读取Json字符串
本文关键字:Json 字符串 读取 Newtonsoft 使用 | 更新日期: 2023-09-27 17:51:20
我不能用c#读取json字符串。读取
时出现错误Json文件{
"Invoice": {
"Description": "New",
"InvoiceTypeId": "3d166468-3923-11e6-9e7c-40e230cfb8ae",
"CustomerAccountsId": "TEST",
"InvoiceDate": "2016-06-27",
"PayableDate": "2016-06-27",
"Prefix": "A",
"Serial": "34222",
"tag": "TEST"
},
"InvoiceLine": [
{
"ValueId": "c41d3d85-3a1e-11e6-9e7c-40e230cfb8ae",
"Qantity": "3",
"UnitId": "a72e0dde-3953-11e6-9e7c-40e230cfb8ae",
"Price": "1.500,00",
"VatRateId": "18",
"LineVat": "810,00",
"LineTotal": "5.310,00",
"Vat": "00a239f1-3c3a-11e6-9e7c-40e230cfb8ae"
},
{
"ValueId": "fd11b236-3952-11e6-9e7c-40e230cfb8ae",
"Qantity": "5",
"UnitId": "a72e0dde-3953-11e6-9e7c-40e230cfb8ae",
"Price": "1.000,00",
"VatRateId": "18",
"LineVat": "900,00",
"LineTotal": "5.900,00",
"Vat": "00a239f1-3c3a-11e6-9e7c-40e230cfb8ae"
}
]
}
"从JsonReader读取JArray出错。"当前JsonReader项目不是一个数组:StartObject。路径",行1,位置1。"
JArray jsonVal = JArray.Parse(jsonArr) as JArray;
dynamic vars = jsonVal;
但是一切正常,我没有看到bug
不要这样做…当你解析一个数组时,它显然是一个复杂的对象。
使用诸如Visual Studio或json2csharp.com之类的转换器来创建适当的目标对象结构:
public class Invoice
{
public string Description { get; set; }
public string InvoiceTypeId { get; set; }
public string CustomerAccountsId { get; set; }
public string InvoiceDate { get; set; }
public string PayableDate { get; set; }
public string Prefix { get; set; }
public string Serial { get; set; }
public string tag { get; set; }
}
public class InvoiceLine
{
public string ValueId { get; set; }
public string Qantity { get; set; }
public string UnitId { get; set; }
public string Price { get; set; }
public string VatRateId { get; set; }
public string LineVat { get; set; }
public string LineTotal { get; set; }
public string Vat { get; set; }
}
public class Invoices
{
public Invoice Invoice { get; set; }
public List<InvoiceLine> InvoiceLine { get; set; }
}
然后直接使用JsonConvert
方法进行反序列化。
var parsedJson = JsonConvert.DeserializeObject<Invoices>(json);
还可以将其反序列化为动态对象。当然,这不是理想的,但如果你不想为它创建一个全新的类型,这是可行的
var vars =JsonConvert.DeserializeObject<dynamic>( jsonArr);
//vars.InvoiceLine
我注意到在你的问题和评论中,"我如何阅读这个?"你可能也会在阅读JSON时感到困惑,这使得错误信息让你感到困惑。
你试图解析对象作为一个JArray,而你的JSON不是一个数组。
如果你看你的错误信息,
"从JsonReader读取JArray出错。"当前JsonReader项目不是一个数组:StartObject。路径",行1,位置1。"
它会立即在JSON的第一行的第一个字符抛出一个错误,并告诉你它不是一个数组。
{是JSON的第一个字符,它是一个数组,应该以[开始,就像你在写JavaScript一样。
数组:var javaScriptArray = ["This", "Is", "An", "Array"];
对象:var javaScriptObject = { id: 0, thisIsAnArray: false };
并把它们放在一起:
var javaScriptArrayOfObjects = [ { id: 0, thisIsAnArray: false},{ id: 1, thisIsAnArray: false} ];
你可以看到,当你看你的JSON (Java Script Object Notation)时,你应该能够分辨它是一个对象数组还是一个带有数组的对象。
这应该指出它是一个复杂的对象,而不是一个数组,David L的回答完美地涵盖了这一点。
我只是想更好地理解错误信息。