2016-06-27 53 views
1

我無法用c#讀取json字符串。我在閱讀時遇到錯誤。用Newtonsoft 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電流JsonReader項讀取JArray不是數組:。在StartObject路徑 '',第1行,位置1」。

JArray jsonVal = JArray.Parse(jsonArr) as JArray; 
dynamic vars = jsonVal; 

但是一切正常,我沒有看到錯誤。

+4

你試圖反序列化一個不是數組的數組的json字符串。 –

+0

我怎麼讀這個? – caras

+0

創建您自己的類來反序列化此JSON字符串。 –

回答

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); 
+3

提及http://json2csharp.com的互聯網點 - 我發誓,因爲它保存了我的培根公平幾次:) –

1

您也可以將其反序列化爲動態對象。當然,這是不理想的,但如果你不想爲它創建一個全新的類型,這將工作

var vars =JsonConvert.DeserializeObject<dynamic>( jsonArr); 
//vars.InvoiceLine 
1

我的問題,發現和自己的留言,「做我怎麼讀呢? 「您也可能會在閱讀JSON時感到困惑,因爲這會使您的錯誤信息混淆不清。

您正嘗試將對象解析爲JArray,而JSON不適用於數組。

如果你看看你的錯誤信息,

「錯誤從JsonReader當前JsonReader項讀書JArray不是數組:。在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的答案完美地覆蓋了它。

我只是想更好地理解錯誤信息。

+0

是的,你是正確的。謝謝 – caras