簡體   English   中英

使用JSON.net(newtonsoft)將多個JSON數組反序列化為單獨的C#數據集/數據表

[英]Deserialize multiple JSON arrays into separate C# datasets/datatables using JSON.net (newtonsoft)

我正在嘗試幾個小時,以便使用C#中的Newtonsoft JSON.net將以下兩個JSON數組(即客戶端和文檔)放入兩個單獨的數據集/數據表中:

{
   "status": "OK",
   "clients": [
    {
        "ClientID": "123456",
        "Fullname": "John Doe",
        "Inactive": false
    },
    {
        "ClientID": "234567",
        "Fullname": "James Smith",
        "Inactive": false
    }
   ],
   "dossiers": [
    {
        "CreateDate": "03.06.2013",
        "DossierName": "JD20130603"
    },
    {
        "CreateDate": "04.06.2013",
        "DossierName": "JS20130604"
    }
    ]
}

有人可以幫忙嗎? 提前致謝...

編輯:如果可能的話,我想避免整個Class的事情。

編輯2:到目前為止,我已經嘗試了以下方法

var _clientlist = JObject.Parse(_jsonresp)["clients"].Children();

哪個可行,但我無法將值放入數據集/可重復

_clientlist = (DataTable)JsonConvert.DeserializeObject(_jsonresp, (typeof(DataTable)));

失敗:(

DataSet _dataset = JsonConvert.DeserializeObject<DataSet>(_jsonresp);
DataTable _clientlist = _dataset.Tables["clients"];

與上述過程類似,但結果相同

dynamic _d = JValue.Parse(_response);
JArray _jsonval = JArray.Parse(_d.clients) as JArray;

失敗:(

在這一點上,我放棄了。

這並不能完全回答問題,因為我個人不知道為什么當json.NET模型更注重於反序列化為對象時,為什么要反序列化為數據集。 這里是;

public class TheJson
{
    public string status { get; set; }
    public client[] clients { get; set; }
    public dossier[] dossiers { get; set; }
}


public class client
{
     public string ClientID { get; set; }
     public string Fullname { get; set; }
     public bool Inactive { get; set; }
}

public class dossier
{
     public string CreateDate { get; set; }
     public string DossierName { get; set; }
}

有了這些定義,它就很簡單;

TheJson clientsAndDossiers = JsonConvert.DeserializeObject<TheJson>(_jsonresp);

現在,關於您的最后一條評論,要應用搜索過濾器,我將僅使用LINQ。 例如,如果我只想獲得活躍的客戶,那我可以做;

List<client> activeClients = clientsAndDossiers.clients.Where(x => x.Inactive == false).ToList();

關於您對本文的評論,這是LINQ的實現;

string inputString = MenuSearchBox.Text.ToString();
List<client> filtered = clientsAndDossiers.clients.Where(x => x.Fullname.Contains(inputString)).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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