Google Code Prettify

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Cannot implicitly convert type 'Newtonsoft.Json.Linq.JArray' to 'System.Collections.Generic.List''

這個錯誤 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Cannot implicitly convert type 'Newtonsoft.Json.Linq.JArray' to 'System.Collections.Generic.List' 是由於您嘗試將一個 JArray 轉換為 List 引起的。Newtonsoft.Json.Linq.JArray 是 Newtonsoft.Json 庫中的一個類型,表示 JSON 陣列,而 List 是一個泛型列表。


要解決這個問題,您需要顯式地將 JArray 轉換為 List。這可以通過 JsonConvert 類的 DeserializeObject 方法來實現。


以下是具體的做法:


假設 JSON 形式
假設您從某個地方獲得的 JSON 是這樣的:

json
[
    {
        "Id": 1,
        "Name": "Company A",
        "Location": "Location A"
    },
    {
        "Id": 2,
        "Name": "Company B",
        "Location": "Location B"
    }
]



模型類 tblCompany
首先,確保您的模型類 tblCompany 是這樣的:

csharp
namespace WebModel.Models
{
    public class tblCompany
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Location { get; set; }
    }
}



反序列化 JSON
以下是從 JArray 反序列化為 List 的範例:

csharp
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using WebModel.Models;

public class Program
{
    public static void Main()
    {
        // 假設您獲得了一個 JSON 陣列
        string jsonArray = "[{\"Id\":1,\"Name\":\"Company A\",\"Location\":\"Location A\"},{\"Id\":2,\"Name\":\"Company B\",\"Location\":\"Location B\"}]";

        // 將 JSON 字符串解析為 JArray
        JArray jArray = JArray.Parse(jsonArray);

        // 反序列化為 List<tblCompany>
        List<tblCompany> companies = jArray.ToObject<List<tblCompany>>();

        // 使用反序列化的數據
        foreach (var company in companies)
        {
            Console.WriteLine($"Id: {company.Id}, Name: {company.Name}, Location: {company.Location}");
        }
    }
}




注意事項
引用 Newtonsoft.Json:確保您的專案中引用了 Newtonsoft.Json 庫。如果沒有引用,可以使用 NuGet 包管理器安裝:

bash
dotnet add package Newtonsoft.Json

JSON 格式一致:確保 JSON 字符串的結構與 tblCompany 類中的屬性對應。



總結

要將 JArray 轉換為 List<WebModel.Models.tblCompany>,您需要使用 ToObject<List<tblCompany>>() 方法來反序列化 JSON 陣列。這樣可以正確地將 JSON 陣列轉換為所需的列表類型,避免類型轉換錯誤。