簡體   English   中英

C#從JArray創建通用列表

[英]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.

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