簡體   English   中英

使用Newtonsoft C#讀取Json字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM