C#使用嵌套列表存储动态数据

时间:2015-08-10 04:38:25

标签: c# xml excel list

我试图找出将XML文件中的动态数据存储到带有子列表的C#列表的最佳方法。每个XML文档都有1个或多个" Sheet"节点总是具有" name"的属性。和"数据"。每个" Sheet"元素可以有0到X个子元素"参数"节点总是具有" ParamName"的属性。和#34; ParamValue"。

示例数据集如下所示:

<Root>
    <Sheet name="name1" data="This is data for sheet 1">
        <Parameters ParamName="PraramName1" ParamValue="ParamValueS1.1">
        <Parameters ParamName="PraramName2" ParamValue="ParamValueS1.2">
    </Sheet>
    <Sheet name="name2" data="This is data for sheet 2">
    </Sheet>
    <Sheet name="name3" data="This is data for sheet 3">
        <Parameters ParamName="PraramName1" ParamValue="ParamValueS3.1">
        <Parameters ParamName="PraramName2" ParamValue="ParamValueS3.2">
        <Parameters ParamName="PraramName3" ParamValue="ParamValueS3.3">
    </Sheet>
</Root>

我正在试图找出将这些数据存储到每个&#34; Sheet&#34;的C#列表中的最佳方法。元素带有一个可选的子列表,用于每个&#34;参数&#34;元件。

public class SheetData
{
    public string SheetName { get; set;}
    public string SheetData { get; set;}
}

public class ParameterData
{
    public string ParamName { get; set;}
     public string ParamValue {get; set;}
}

public class ComboData
{
    public SheetData sDat = new SheetData();
    public List<ParameterData> pDat = new List<ParameterData>();
}

我不确定我是否正确设置了ComboData类,或者我的问题是实例化类并向其添加数据。我已经尝试了很多不同的场景来使用这个课程但是还没有能够让它发挥作用。以下示例。

List<SheetData> sInfo = new List<SheetData>();
List<ParameterData> pP = new List<ParameterData>();

// This works for the SheetInfo class and also worked when I added a
// reference to a ParameterData list in this class.     
sInfo.Add(new SheetInfo
{
    SheetName = "SheetName",
    SheetQuery = "TheQuery",
});


SheetInfo sIF = new SheetData();
sIF.SheetName = "SName";
sIF.SheetQuery = "SDat";


// This is my most recent failure at adding sheet data with child param data
List<ComboInfo> CombInf = new List<ComboInfo>();
CombInf.Add(new parameters { ParamName = "hth", ParamValue = "dfsf" }, new      SheetInfo { SheetName = "dsdfsd", SheetQuery = "sdfsfs" });


 foreach (SheetData si in sInfo)
 {
     Console.WriteLine(si.SheetName);
 }

也许我接近这个要求都是错误的,不应该尝试使用列表,或者我没有正确地实例化列表和子列表。任何指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

如何组合课程:

    public class Sheet
    {
        public string SheetName { get; set; }
        public string SheetData { get; set; }

        public List<ParameterData> ParameterData = new List<ParameterData>();
    }

    public class ParameterData
    {
        public string ParamName { get; set; }
        public string ParamValue { get; set; }
    }

并添加就像您的xml格式化:

    sheets.Add(new Sheet()
    {
        SheetName = "Sheet 1",
        SheetData = "FJE35N3LN20",
        ParameterData = new List<ParameterData>()
        {
            new ParameterData()
            {
                ParamName = "Parameter One",
                ParamValue = "1"
            },

            new ParameterData()
            {
                ParamName = "Parameter Two",
                ParamValue = "2"
            }
        }
    });

当然这都是硬编码的,你需要在遍历和保存xml文件时使用循环。