【问题标题】:C# Storing dynamic data with nested listsC# 使用嵌套列表存储动态数据
【发布时间】:2015-08-10 04:38:24
【问题描述】:

我正在尝试找出将动态数据从 XML 文件存储到带有子列表的 C# 列表的最佳方法。每个 XML 文档将有 1 个或多个“Sheet”节点,这些节点将始终具有“name”和“data”的属性。每个“Sheet”元素可能有 0 到 X 个子“参数”节点,这些节点始终具有“ParamName”和“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>

我正在尝试找出将这些数据存储到每个“Sheet”元素的 C# 列表中的最佳方法,每个“Parameters”元素都有一个可选的子列表。

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);
 }

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

【问题讨论】:

    标签: c# xml excel list


    【解决方案1】:

    如何组合类:

        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 文件时需要使用循环。

    【讨论】:

    • 太棒了,这正是我想要的。非常感谢快速回答。我从组合类开始,但看起来我只是错误地实例化了子 ParameterData 列表。感谢您的帮助。
    • @LT-Bienabee 我很高兴你能发现它有帮助,如果你需要任何其他相关帮助,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2016-09-23
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多