[英]How do I deserialize this JSON string from API (array of arrays)
想象一下, serialized
變量來自API,而我沒有RsTarget類作為API的客戶端。
我當時想我可以將其反序列化為動態對象,然后以這種方式訪問屬性。 但是,在了解如何執行此操作時會遇到一些麻煩。 它是一個數組數組。 我發現了如何反序列化頂級數組,但是元素在JSON字符串中。
假設我要訪問Target3屬性。
我看錯了嗎? 我應該在客戶端上復制RsTarget嗎? 如果API更改了RsTarget怎么辦?
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
List<List<RsTarget>> toReturn = new List<List<RsTarget>>();
List<RsTarget> list = new List<RsTarget>();
list.Add(new RsTarget() { Id = 1, MyProperty = "Target1" });
List<RsTarget> list2 = new List<RsTarget>();
list2.Add(new RsTarget() { Id = 2, MyProperty = "Target2" });
list2.Add(new RsTarget() { Id = 3, MyProperty = "Target3" });
toReturn.Add(list);
toReturn.Add(list2);
var serialized = JsonConvert.SerializeObject(toReturn);
var deserialized = JsonConvert.DeserializeObject<JArray>(serialized).ToObject<List<List<JObject>>>();
}
}
class RsTarget
{
public int Id { get; set; }
public string MyProperty { get; set; }
}
}
當您獲得JArray
時應該不會有什么問題
var arr = JsonConvert.DeserializeObject<JArray>(serialized);
for(var i = 0;i < arr.Count; i++)
{
JArray arr2 = arr[i] as JArray;
for(var j = 0;j < arr2.Count; j++)
{
JObject obj = arr2[j] as JObject;
// using dynamic
dynamic dobj = obj;
var Id = (int)doObj.Id;
// using strong type
var strongObj = obj.ToObject<MyClientClass>()
}
}
我應該在客戶端上復制RsTarget嗎? 如果API更改了RsTarget怎么辦
在客戶端上復制RsTarget的最佳方法。 對於第二個問題:即使您使用JObject
,當api JObject
屬性名稱時,它總是會中斷您的應用程序,但是如果僅添加屬性,則它們都不會受到影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.