【问题标题】:Message = "Unexpected character encountered while parsing value: [. Path '', line 1, position 1."Message = \"解析值时遇到意外字符:[.Path \'\', line 1, position 1.\"
【发布时间】:2022-11-05 00:50:12
【问题描述】:

我想在我的 ASP.NET Core MVC 视图中显示部门列表。

请注意,我有 3 层(数据访问 + API(从数据库获取数据)+ MVC (UI))。

这是我使用 API 调用从数据库中获得的 Json 数据:

[
  {
    "id": 3,
    "name": "Sales"
  },
  {
    "id": 4,
    "name": "PMO"
  },
  {
    "id": 5,
    "name": "Research And Development"
  },
  {
    "id": 6,
    "name": "Product Management"
  },
  {
    "id": 7,
    "name": "HR"
  },
  {
    "id": 8,
    "name": "Ava"
  },
  {
    "id": 9,
    "name": "IT"
  }
]

这是我使用 HttpClient 从 API 获取数据的 C# 代码:

public async Task<T> GetRequest<T>(string uri)
{
        try
        {
            var client = _httpClientFactory.CreateClient();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            using (HttpResponseMessage response = await client.GetAsync(uri))
            {
                if (response.StatusCode.ToString() == "OK")
                {
                    _logger.LogInformation("Get Request Successed");
                    //response.EnsureSuccessStatusCode();
                   responseBody = await response.Content.ReadAsStringAsync();
                }

                return JsonConvert.DeserializeObject<T>(responseBody);
            }
        }
        catch (Exception ex)
        {
            _logger.LogError("Failed");
            return JsonConvert.DeserializeObject<T>(responseBody);
        }
}

当我试图解析来自 json 的数据时,它返回一个错误。

解析值时遇到意外字符:[。路径'',第 1 行,位置 1。

【问题讨论】:

  • 你没有显示 T 你用什么来调用 GetRequest() 但我猜它不是一个集合(和你的 JSON一个集合)。

标签: c# asp.net-mvc api asp.net-core httpclient


【解决方案1】:

您可以将string 解析为强类型Model,然后对其进行反序列化,或者您可以使用dynamic 并访问如下所示的属性:

你可以找到一个工作示例here

using System;
using Newtonsoft.Json;
using System.Collections.Generic;
                    
public class Program
{
    public static void Main()
    {
        var myJsonString=@"[{'id':3,'name':'Sales'},{'id':4,'name':'PMO'},{'id':5,'name':'Research And Development'},{'id':6,'name':'Product Management'},{'id':7,'name':'HR'},{'id':8,'name':'Ava'},{'id':9,'name':'IT'}]";
        var result =JsonConvert.DeserializeObject<List<Root>>(myJsonString);
        Console.WriteLine("Example using Model: 
");
        foreach(var item in result)
        {
            Console.WriteLine(item.id);
            Console.WriteLine(item.name);           
        }
        
        Console.WriteLine("
");
        Console.WriteLine("Example using Dynamic: 
");
        
        //Example using dynamic
        var resultDynamic=JsonConvert.DeserializeObject<dynamic>(myJsonString);
        foreach(var item in resultDynamic)
        {
            Console.WriteLine(item["id"]);
            Console.WriteLine(item["name"]);        
        }
    }
}

public class Root
{
    public int id { get; set; }
    public string name { get; set; }
}

输出:

Example using Model: 

3
Sales
4
PMO
5
Research And Development
6
Product Management
7
HR
8
Ava
9
IT


Example using Dynamic: 

3
Sales
4
PMO
5
Research And Development
6
Product Management
7
HR
8
Ava
9
IT

【讨论】:

    【解决方案2】:

    在我的情况下,问题是 JSON 文件编码被选为“UTF-8-BOM”

    我不得不将其转换为“UTF-8”。

    然后它对我来说很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多