0

我现在尝试了几个小时,使用 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"
    }
    ]
}

有人可以帮忙吗?提前致谢...

编辑:如果可能的话,我想避免整个班级的事情。

编辑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;

失败:(

在这一点上我放弃了。

4

1 回答 1

4

这并不能完全回答这个问题,因为我个人不明白为什么当 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();
于 2013-06-04T20:17:35.470 回答