我有一个来自Mysql查询的数据集,我需要在点击HTTP端点之前重新构建一些附加信息。所需的输出如下所示:
{
"data": [
{
"reference_id": 19,
"category": 2,
"title": "Unconfirmed",
"code": "Unconfrm"
},
{
"reference_id": 20,
"category": 2,
"title": "Left Msg",
"code": "LeftMsg"
}
],
"meta": {
"firstRecord": 0, //for pagination
"lastRecord": 2, //for pagination
"page": 1, //for pagination
"sync": "null" //internal use
}
}
我从以下内容返回data
元素:
public class DataConnection
{
public static DataSet ExecuteQuery(string strQuery)
{
DataSet ds = new DataSet();
using (MySqlConnection mySqlConnection = new MySqlConnection("server=localhost;uid=root;database=sampledb"))
{
mySqlConnection.Open();
using (MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strQuery, mySqlConnection))
{
dataAdapter.TableMappings.Add("Table", "data");
dataAdapter.Fill(ds);
}
mySqlConnection.Close();
}
return ds;
}
}
我需要填充meta
部分,但无法弄清楚如何。我将数据集转换为JObject和JArray并且能够计算结果,虽然我还没有实现分页,但我很快就会。无论哪种方式,问题是我如何使用meta
对象从Mysql加入DataSet? .Add()方法似乎不能在根级别工作,只有当我尝试在data
元素下添加它时才会起作用。
我正在尝试这条线:
DataSet definitionsReturned = DataConnection.ExecuteQuery("SELECT DefNum AS reference_id, Category AS category, ItemName AS title, ItemValue AS code from definition WHERE category IN(2,13) ORDER BY category");
string meta = @"[{
'firstRecord': 0,
'lastRecord': 27,
'page': 1,
'sync': 'null'
}]";
DataSet myDataSet = JsonConvert.DeserializeObject<DataSet>(meta);
definitionsReturned.Merge(myDataSet);
string json = JsonConvert.SerializeObject(definitionsReturned);
//also tried this
// JArray jsonArray = (JArray) jsonParsed[0]; //also tried this
//jsonArray.Add(myDataSet);
答案 0 :(得分:1)
您可以创建一个包含数据集和元数据的类:
public class MyReturnObject {
public List<MyDataObject> Data { get; set; }
public Metadata Meta { get; set; }
}
public class Metadata {
public int FirstRecord { get; set; }
public int LastRecord { get; set; }
public int Page { get; set; }
public WhateverType Sync { get; set; }
}
请注意,您还可以按照here所述的ExecuteQuery
直接获取已列入结果的列表。
就像你必须做的那样:
List<MyDataObject> definitionsReturned = DataConnection.ExecuteQuery<MyDataObject>("SELECT DefNum AS reference_id, Category AS category, ItemName AS title, ItemValue AS code from definition WHERE category IN(2,13) ORDER BY category").ToList();
MyReturnObject res = new MyReturnObject {
Data = definitionsReturned,
Meta = new Metadata {
FirstRecord = 0,
LastRecord = 27,
Page = 1,
Sync = null
}
};
string json = JsonConvert.SerializeObject(res);