[英]Deserialize json string into a list of .NET objects
要求
我正在嘗試構建一個以 json 字符串作為輸入的函數。 並輸出對象列表。 json 字符串的格式與此類似:
{\"custlist\":[{\"cust_name\":\"Vincent\",\"cust_id\":\"klq:206f387:2d08m92t6\"},{\"cust_name\":\"Joyce\",\"cust_id\":\"125g:1474grx:2d03t9dld\"}]}
我的搜索
有很多解決方案將 json 數組反序列化為對象列表,但數組從字符串的開頭開始。 即沒有 \\"custlist\\": 部分
如果我們在 json 字符串中有 \\"custlist\\": 部分,那么這些解決方案就會中斷。
我的代碼
這是我在 C# 中的代碼。 它正在工作,但我必須使用正則表達式來匹配輸入字符串。 看起來過於復雜了。 必須有更簡單的方法。 誰知道,請指教
public void Test()
{
string str = {\"custlist\":[{\"cust_name\":\"Vincent\",\"cust_id\":\"klq:206f387:2d08m92t6\"},{\"cust_name\":\"Joyce\",\"cust_id\":\"125g:1474grx:2d03t9dld\"}]};
List<Customer> list = Json2List<Customer>(str);
foreach (Customer c in list)
{
console.writeline ("name=" + c.cust_name);
console.writeline ("id=" + c.cust_id);
}
}
public List<T> Json2List<T>(string s)
{
string json_listname = Regex.Match(s, "\"" + @"(\w+?)" + "\":").Groups[0].Value;
JObject jObject = JObject.Parse(s);
List<JToken> jTokenList = jObject.GetValue(json_listname).ToList();
List<T> LstT = new List<T>();
foreach (JToken jt in jTokenList)
{
T obj = jt.ToObject<T>();
LstT.Add(obj);
}
return LstT;
}
public class Customer
{
public string cust_name { get; set; }
public string cust_id { get; set; }
}
我真的不知道問題是什么,但本質上:
public class CustomerList {
[JsonProperty("custlist")]
public Customer[] Customers { get; set; }
}
public class Customer
{
[JsonProperty("cust_name")]
public string Name { get; set; }
[JsonProperty("cust_id")]
public string Id { get; set; }
}
var sample = "{\"custlist\":[{\"cust_name\":\"Vincent\"},{\"cust_id\":\"klq206f3872d08m92t6\"},{\"cust_name\":\"Joyce\"},{\"cust_id\":\"125g1474grx2d03t9dld\"}]}";
var result = JsonConvert.DeserializeObject<CustomerList>(sample).Customers;
// Or!
var dictResult = JsonConvert.DeserializeObject<Dictionary<string, Customer[]>>(sample)["custlist"];
看起來它是一個存儲在 JSON 字符串中的 JSON 對象。
因此,首先將其反序列化為字符串,然后將其反序列化為正確類型的列表。 您可以同時使用JsonConvert.DeserializeObject
:
更新:我剛剛意識到 JSON 中的數組是 JSON 對象的一個屬性,這里我沒有考慮。 我現在沒有時間解決這個問題,但我希望你能明白。
public List<T> Json2List<T>(string s)
{
string json_object = JsonConvert.DeserializeObject<string>(s);
return JsonConvert.DeserializeObject<List<T>>(json_object);
}
但我也會研究為什么你得到的數據是這樣雙重序列化的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.