Web APIをテストしています。私はこれを持っているデータのモック:
var objs = ((JArray)JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}")).Values<JObject>();
これは私にエラーを与えます:
タイプ「Newtonsoft.Json.Linq.JObject」のオブジェクトをタイプ「Newtonsoft.Json.Linq.JArray」にキャストできません
事はそれが働いていたということです。私は何かを変えたに違いありませんが、私は何を知りません。
私の意図は、このJSONオブジェクトを、次のフィールドを持つ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
なので、JArray
にキャストしないでください。これを試して:
var objs = JsonConvert.DeserializeObject("{ \"PrintId\":10,\"Header\":\"header\",\"TC\":\"tc\",\"CompanyRef\":\"00000000-0000-0000-0000-000000000000\"}");
Updateコレクションを取得するにはList<Print>
、JSONは配列である必要があります。これを試してください(JSONを配列にして、2番目のオブジェクトを追加しました):
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; }
}
フィドル です。
私にとっては、問題の原因となったオブジェクトとして空の文字列を入れていましたが、「{}」に切り替えて問題を修正しました