[英]Nested json from datatable
我有一個數據表,其值如下:
UerId TimeStamp Parameter Value
----- --------- --------- -----
1 03/24/2013 Param1 Value1
1 03/24/2013 Param2 Value2
1 03/24/2013 Param3 Value3
1 03/25/2013 Param4 Value4
1 03/25/2013 Param5 Value5
2 03/24/2013 Param1 Value6
2 03/24/2013 Param2 Value7
2 03/25/2013 Param1 Value8
我需要創建嵌套的json字符串,例如:
Users:[
"UserId": <id>,
"date":[
"TimeStamp": <TimeStamp>,
"Values" : [
{ "Parameter": <Parameter>, "Value": <Value> },
{ "Parameter": <Parameter>, "Value": <Value> },
...
]
],
...
]
我列出了不同的值:
List<String> ListOfUsers = new List<String>();
List<DateTime> ListOfDates = new List<DateTime>();
ListOfUsers = dt.AsEnumerable().Select(row => row.Field<String>("UserId")).Distinct().ToList<String>();
ListOfDates = dt.AsEnumerable().Select(row => row.Field<DateTime>("TimeStamp").Date).Distinct().ToList<DateTime>();
我是否可以遍歷整個表,或者還有其他更好的方法,也許使用Json.net庫? 謝謝。
您可以通過多種方式執行此操作,但最簡單的方法是使用.net JavaScriptSerializer。 只需構建類來模仿您感興趣的結構,然后使用數據庫中的數據填充對象,然后對其進行序列化即可。 我將為您舉一個例子。
將此用作您要填充的對象
public class YourObject
{
public YourObject(){
}
public YourObject (DataTable dataTable){
//Do work here to load your data set into your Users and other necessary objects.
Users = new Users(dataTable);
}
public UsersObject Users { get; set; }
public class UsersObject : List<UserObject> {
public UsersObject (DataTable dataTable){
dataTable.AsEnumerable().Select(row => row.Field<String>("UserId")).Distinct().ToList<String>().ForEach(x => this.Add(new UserObject(){UserId = x}));
foreach(UserObject user in this){
user.LoadDates(dataTable.Select("UserId = '" + user.UserId + "'"));
}
}
}
public class UserObject {
public UserObject (){
date = new DatesObject();
}
public void LoadDates(DataRow[] rows){
rows.AsEnumerable().Select(row => row.Field<DateTime>("TimeStamp").Date).Distinct().ToList<DateTime>().ForEach(x => this.Add(new DateObject(){TimeStamp = x}));
foreach(DateObject date in this){
date.LoadParams(rows.Select("TimeStamp = '" + date.TimeStamp.ToString("MM/dd/yyyy") + "'"));
}
}
public string UserId { get; set; }
public DatesObject date { get; set; }
}
public class DatesObject : List<DateObject>{
public DatesObject (){
}
}
public class DateObject {
public DateObject () {
}
public void LoadValues(DataRow[] rows){
//Load your value/params like in the previous methods
}
public DateTime TimeStamp { get; set; }
public ValuesObject Values { get; set; }
}
public class ValuesOject : List<ValueObject> {
public ValuesOject () {
}
}
public class ValueObject {
public ValueObject () {
}
public string Parameter { get; set; }
public string Value { get; set; }
}
}
然后使用它來序列化該對象
protected void Page_Load(object sender, EventArgs e){
YourObject yourObject = new YourObject(Data.GetYourDataTable());
JavaScriptSerializer serializer = new JavaScriptSerializer();
string serializedItems = serializer.Serialize(yourObject);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.