C# 使用Newtonsoft C读取Json字符串#
我无法用c#读取json字符串。我在阅读时出错了 Json文件C# 使用Newtonsoft C读取Json字符串#,c#,jquery,model-view-controller,json.net,C#,Jquery,Model View Controller,Json.net,我无法用c#读取json字符串。我在阅读时出错了 Json文件 { "Invoice": { "Description": "New", "InvoiceTypeId": "3d166468-3923-11e6-9e7c-40e230cfb8ae", "CustomerAccountsId": "TEST", "InvoiceDate": "2016-06-27", "PayableDate": "2016-
{
"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.Path“”,第1行,位置1
但一切正常,我看不到bug。不要这样做……当数组显然是一个复杂对象时,您正在解析它 使用转换器(如Visual Studio)或创建适当的目标对象结构:
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; }
}
不要这样做…你正在解析一个数组,而它显然是一个复杂的对象 使用转换器(如Visual Studio)或创建适当的目标对象结构:
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; }
}
还可以将其反序列化为动态对象。当然,这并不理想,但如果您不想为它创建一个全新的类型,这将是可行的
var vars =JsonConvert.DeserializeObject<dynamic>( jsonArr);
//vars.InvoiceLine
var vars=JsonConvert.DeserializeObject(jsonArr);
//可变发票行
您还可以将其反序列化为动态对象。当然,这并不理想,但如果您不想为它创建一个全新的类型,这将是可行的
var vars =JsonConvert.DeserializeObject<dynamic>( jsonArr);
//vars.InvoiceLine
var vars=JsonConvert.DeserializeObject(jsonArr);
//可变发票行
我在问题和您的评论中注意到,“我如何阅读此内容?”您在阅读JSON时可能也会感到困惑,这使错误消息让您感到困惑
您试图将对象解析为JArray,而JSON不用于数组
如果您查看错误消息
从JsonReader读取JArray时出错。当前JsonReader项不是数组:StartObject.Path“”,第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脚本对象表示法)时,您应该能够判断它是对象数组还是带有数组的对象
这应该说明它是一个复杂的对象,而不是数组,David L的回答完美地涵盖了这一点
我只是想谈一谈如何更好地理解错误信息。我在问题和您的一条评论中注意到,“我如何阅读此内容?”您可能在阅读JSON时也会感到困惑,这会让您对错误信息感到困惑 您试图将对象解析为JArray,而JSON不用于数组 如果您查看错误消息 从JsonReader读取JArray时出错。当前JsonReader项不是数组:StartObject.Path“”,第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脚本对象表示法)时,您应该能够判断它是对象数组还是带有数组的对象
这应该说明它是一个复杂的对象,而不是数组,David L的回答完美地涵盖了这一点
我只是想进一步了解错误消息。您正在尝试将非数组的json字符串反序列化为数组对象。我如何读取此内容?创建您自己的类以反序列化此json字符串。您正在尝试将非数组的json字符串反序列化为数组对象。我如何读取此内容?创建你自己的类来反序列化这个JSON字符串。互联网点评-我发誓,因为它保存了我的培根好几次:)互联网点评-我发誓,因为它保存了我的培根好几次:)