我无法用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;
但是一切正常,我没有看到错误。
答案 0 :(得分:4)
不要这样做......当你的数组显然是一个复杂的对象时,你就会解析它。
使用转换器(如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);
答案 1 :(得分:1)
您也可以将其反序列化为动态对象。当然这不是理想的,但是如果你不想为它创建一个全新的类型,这将起作用
var vars =JsonConvert.DeserializeObject<dynamic>( jsonArr);
//vars.InvoiceLine
答案 2 :(得分:1)
我在问题和注释中注意到了,&#34;我如何看待这个?&#34;你可能也会因为阅读JSON而感到困惑,这使得错误信息让你感到困惑。
您尝试将对象解析为JArray,而JSON不是数组。
如果您查看错误消息,
&#34;从JsonReader读取JArray时出错。当前的JsonReader项不是数组:StartObject。路径&#39;&#39;,第1行,第1位。&#34;
它会立即在你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的答案完全涵盖了这一点。
我只想更好地理解错误信息。