json数组解析错误,应用程序完成,而没有读取整个请求正文

时间:2018-11-29 10:29:50

标签: c# json asp.net-core

我在此问题上停留了4多个小时。我的json看起来很好,至少对于jsonLint来说,这是一个示例:

[{
    "cnpj": "1",
    "notasPorConsulta": "1",
    "partirDe": "1"
}, {
    "cnpj": "2",
    "notasPorConsulta": "2",
    "partirDe": "2"
}]

{
    "NovoRastreio": [{
        "cnpj": "1",
        "notasPorConsulta": "1",
        "partirDe": "1"
    }, {
        "cnpj": "2",
        "notasPorConsulta": "2",
        "partirDe": "2"
    }]
}

这是我使用javascript发布的方式。

(async () => {
        console.log(NovoRastreio);
        const fetchResp = await fetch('api/values/NovoRastreio', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: NovoRastreio
        })
        .then();
            .then(res => console.log(res.json()));
    })();

我也尝试了没有异步/等待。没有成功。

首先,我创建了一个基本模型,然后使用QuickType生成了另一个模型。

public partial class NovoRastreio
    {
        [JsonProperty("NovoRastreio")]
        public List<NovoRastreioElement> Rastreios { get; set; }
    }

    public partial class NovoRastreioElement
    {
        [JsonProperty("cnpj")]
        public string Cnpj { get; set; }

        [JsonProperty("notasPorConsulta")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long NotasPorConsulta { get; set; }

        [JsonProperty("partirDe")]
        [JsonConverter(typeof(ParseStringConverter))]
        public long PartirDe { get; set; }
    }

然后,我的控制器中,我删除了所有代码,只剩下一个简单的控制台编写器,看它是否可以工作。

[HttpGet("NovoRastreio")]
        public void NovoRastreioPorCnpj([FromBody]NovoRastreio rastreios )
        {
            System.Console.WriteLine(rastreios);
        }

不是,即使我尝试使用邮递员,每次也会从标题中得到错误,而且,我在同一API中有多条其他帖子,而且效果很好,不同之处在于,其他帖子只发布了一个JSON对象,而不是多个对象的列表/数组。

1 个答案:

答案 0 :(得分:0)

好吧,您在[JsonProperty("NovoRastreio")]中声明了class NovoRastreio,但是在json中没有这样的名称字段。 尝试发送如下内容:

{
  "NovoRastreio":
    [{
        "cnpj": "1",
        "notasPorConsulta": "1",
        "partirDe": "1"
    }, {
        "cnpj": "2",
        "notasPorConsulta": "2",
        "partirDe": "2"
    }]
}