簡體   English   中英

Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Newtonsoft.Json.Linq.JArray'

[英]Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Newtonsoft.Json.Linq.JArray'

我正在測試我的 Web API。 Mocking 我有這個數據:

var objs = ((JArray)JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}")).Values<JObject>();

這給了我錯誤:

Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Newtonsoft.Json.Linq.JArray'

問題是它正在工作。 我一定改變了什么,但我不知道是什么。

我的意圖是將此 JSON object 轉換為名為Print的 .NET 對象列表,其中包含以下字段:

PrintId
Header
TX
CompnayRef

只需創建一個類並反序列化它。

public class Print
{
    public int PrintId { get; set; }
    public string Header { get; set; }
    public string TC { get; set; }
    public string CompanyRef { get; set; }
}

Print printObj = JsonConvert.DeserializeObject<Print>(yourJson);
printObj.PrintId = //...

如消息所示,您的對象是JObject因此不要將其JArrayJArray 嘗試這個:

var objs = JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}");

更新要獲取集合List<Print> ,您的JSON需要是一個數組。 試試這個(我讓你的JSON成為一個數組並添加了第二個對象):

string json = "[{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}"
            + ",{ \"PrintId\":20,\"Header\":\"header2\",\"TC\":\"tc2\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}]";
var objs = JsonConvert.DeserializeObject<List<Print>>(json);

//The loop is only for testing. Replace it with your code.
foreach(Print p in objs){
    Console.WriteLine("PrintId: " + p.PrintId);
    Console.WriteLine("Header: " + p.Header);
    Console.WriteLine("TC: " + p.TC);
    Console.WriteLine("CompanyRef: " + p.CompanyRef);
    Console.WriteLine("==============================");
}

public class Print
{
    public int PrintId { get; set; }
    public string Header { get; set; }
    public string TC { get; set; }
    public string CompanyRef { get; set; }
}

這是一個小提琴

僅僅因為 { } 是一個作業符號,要使它成為一個 jarray,只需在它周圍加上方括號,例如 [{ }]。 因此,在您的情況下,只需放置這兩個字符即可解決問題。

var objs = ((JArray)JsonConvert.DeserializeObject("[{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}]")).Values<JObject>();

你可以在這里試試https://dotnetfiddle.net/RmgGw8

注意:你說它以前工作過。 所以這個字符串輸入可能是序列化的結果。 您之前沒有遇到問題,因為您的輸入始終是一個包含多個項目的數組,直到這個。 並且您的序列化程序可能正在為單個項目 arrays 生成單個 object(以“{”開頭的輸出)而不是數組(以“[”開頭的輸出)。

將單個 object 序列化為 JSON object 而不是 Z0ECD11C1D7A287401D148A23BBD7A2 數組的列表

對我來說,我把空字符串作為導致問題的對象,我切換到“{}”來修復我的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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