簡體   English   中英

從數據表嵌套的json

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

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