簡體   English   中英

將 json 字符串反序列化為 .NET 對象列表

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

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