Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Newtonsoft C读取Json字符串#_C#_Jquery_Model View Controller_Json.net - Fatal编程技术网

C# 使用Newtonsoft C读取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-

我无法用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.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字符串。互联网点评-我发誓,因为它保存了我的培根好几次:)互联网点评-我发誓,因为它保存了我的培根好几次:)