[英]Read Json string with Newtonsoft C#
我無法使用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;
但是一切正常,我沒有看到錯誤。
不要這樣做...當它顯然是一個復雜的對象時,您正在解析一個數組。
使用諸如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腳本對象表示法 )時,您應該能夠知道它是對象數組還是帶有數組的對象。
這應該指出您它是一個復雜的對象而不是一個數組,而David L的答案完美地涵蓋了這一點。
我只是想更好地理解錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.