[英]C# Creating generic List from JArray
我正在研究從Json到對象數組的動態導入過程。 通過基於對類對象的字符串引用創建List <>,會有些卡住。
我正在從REST服務器導入json數據,並使用業務對象列表將json數據映射到可以配置的預定義類。 我正在使用NewtonSoft.Json將數據解析為類。
string classname = "BusinessObjects.Contact";
Type classtype = Type.GetType(classname);
// ... filled jsonstring from api request
string json = "[]"; // json filled from rest request
JObject obj = JObject.Parse(json);
JArray array = (JArray)obj["contacts"];
// the issue part...
var records = array.ToObject<List<classtype>>();
編譯器指出我正在使用變量作為類型。 這是有道理的,但找不到解決方法。
任何幫助,將不勝感激!
JArray
反序列化JArray
,您可以動態訪問它,如使用dynamic查詢JSON中所示。 但是,如果您希望反序列化為固定列表類型,因為您正在編寫基於非一般性反射的代碼,則可以執行以下操作:
var listType = typeof(List<>).MakeGenericType(classtype);
var records = array.ToObject(listType);
筆記:
給定一個開放的泛型類型,如List<>
, Type.MakeGenericType()
通過用Type
參數代替開放類型的類型參數來創建封閉的泛型類型。
JToken.ToObject()
是一個非通用版本ToObject()
可以反序列化到指定的Type
。
創建records
列表后,可以將其轉換為非通用IList
接口以訪問集合項。
樣本小提琴與原型樣本JSON和BusinessObjects.Contact
定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.