C#查找json数据的灵活数据结构

时间:2016-12-14 14:09:08

标签: c# json data-structures nested

我正在为表格寻找一个好的数据结构:

Name   | ID | Time  | A3 | A2 | D6 | L4 | H1 | ...
Peter    01   11:01   1    4    8         1    ...
James    02   11:37   7         5    2    2    ...
....

名称,ID和时间的值由我的工具“手动”给出,之后的所有列(“A3”,“A2”,......)来自json字符串,如

{"A3":"7","D6":"5",...}

我的问题是,这些json值可以有任何名称,而且我不知道哪个人会生成哪些值(在示例中,James没有A2的值)。

哪种类/结构最适合存储这些变量?

当然,如果新值“到达”,添加新行应该“容易”。我还想稍后将这个结构写入csv,但这不是问题所在。

我用List<>进行了很多尝试和目录<>但没有设法创造任何易于处理的东西。

提前致谢!

编辑:我最终使用了两个答案的组合:

public class ResultData
{
    public string currentName { get; set; }
    public string currentID { get; set; }
    public DateTime currentTimestamp { get; set; }
    public DataTable results { get; set; }

    public ResultData()
    {
        results = new DataTable();

        // must have columns
        results.Columns.Add("Name", typeof(string));
        results.Columns.Add("ID", typeof(string));
        results.Columns.Add("Timestamp", typeof(DateTime));
    }


    public void AddResult(Dictionary<string, string> resultVars)
    {
        // TODO: check if person is already in list

        DataRow dr = results.NewRow();

        // add basics
        dr["Name"] = currentName;
        dr["ID"] = currentID;
        dr["Timestamp"] = currentTimestamp;

        // check columns
        foreach (var varName in resultVars)
        {
            // add column if needed
            if (!results.Columns.Contains(varName.Key))
            {
                results.Columns.Add(varName.Key);
            }

            // add values
            dr[varName.Key] = varName.Value;
        }

        //finally add row
        results.Rows.Add(dr);
    }
}

对我来说工作正常! : - )

2 个答案:

答案 0 :(得分:0)

您是否尝试过包含Dictionary属性的类?

create trigger record_after_insert after insert on A for each row 
Begin
insert into B values (NEW.trigger_name, sysdate());
End;

答案 1 :(得分:0)

这是您在C#中找到的一种解决方案,

DataTable类存储数据的行和列。它是System.Data命名空间的一部分。我们添加,选择并迭代存储的数据。

使用DataTable的C#程序

 using System;
    using System.Data;

    class Program
    {
        static void Main()
        {
        // Get the DataTable.
        DataTable table = GetTable();
        // ... Use the DataTable here with SQL.
        }

        /// <summary>
        /// This example method generates a DataTable.
        /// </summary>
        static DataTable GetTable()
        {

        // Here we create a DataTable with four columns.
        DataTable table = new DataTable();
        table.Columns.Add("Dosage", typeof(int));
        table.Columns.Add("Drug", typeof(string));
        table.Columns.Add("Patient", typeof(string));
        table.Columns.Add("Date", typeof(DateTime));

        // Here we add five DataRows.
        table.Rows.Add(25, "Indocin", "David", DateTime.Now);
        table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
        table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
        table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
        table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
        return table;
        }
    }

另一个好处是Visual Studio可以帮助您查看数据,

尝试这一点,DataRow Class也有很多可能,它快速而简单,可以保存表数据。