保存值以供以后使用

时间:2017-09-25 07:41:28

标签: c# arraylist save ini

案例:我正在创建一个从plc中读取值的程序。为了读取这些值,将填充配置选项卡。此配置选项卡将所有值放入arraylist中。如果程序关闭,它会丢失所有配置数据,我想创建一个函数来保存这个配置数据。我对这些事情完全陌生,如果你们有一个答案和/或示例代码,我很好奇。我正在考虑存储完整的arraylist,并在我打开 .whatever 文件时读出。

正如您可能已经看到的那样,我已经创建了一个菜单。

Arraylist name = allData。

arraylists在名为DataPerLabel。

的对象中接受此数据

配置标签:

Configuration tab

Class DataPerLabel:

class DataPerLabel
{
    public String labelName;
    public String labelAdress;
    public String dataType;
    public bool monitor;

    public DataPerLabel(String labelName, String labelAdress, String dataType, bool monitor)
    {
        this.labelName = labelName;
        this.labelAdress = labelAdress;
        this.dataType = dataType;
        this.monitor = monitor;
    }

    public String getLabelName()
    {
        return labelName;
    }

    public String getLabelAdress()
    {
        return labelAdress;
    }

    public String getDataType()
    {
        return dataType;
    }

    public bool getMonitor()
    {
        return monitor;
    }
}

我想将这个arraylist存储在.ini或.txt fil

我现在试过这个:

private void menuItemSave_Click(object sender, System.EventArgs e)
    {
        string yourFilePath = @"C:\\Users\\Gebruiker\\Desktop\\WindowsHMI\\";

        XmlSerializer serializer = new XmlSerializer(typeof(DataPerLabel));

        foreach (DataPerLabel configRecord in allData)
        {
            using (XmlWriter writer = XmlWriter.Create(yourFilePath, new XmlWriterSettings() { Indent = true }))
            {
                serializer.Serialize(writer, configRecord);
            }
        }
    }

给我错误:在allDataPerLabel上无法进行序列化,因为它没有没有参数的构造函数。

希望任何人都可以提供帮助,

由于

2 个答案:

答案 0 :(得分:0)

您可以将数据保存为xml字符串:

List<DataPerLabel> _dataPerLabelList; // this is your data object.

.
.
.

// on saving:

XmlSerializer serializer = new XmlSerializer(typeof(List<DataPerLabel>));

using (XmlWriter writer = XmlWriter.Create(yourFilePath, new XmlWriterSettings() { Indent = true }))
{
       serializer.Serialize(writer, _dataPerLabelList);
}

.
.
.


// on loading your form:
XmlSerializer deserializer = new XmlSerializer(typeof(List<DataPerLabel>));

using (XmlReader reader = XmlReader.Create(yourFilePath))
{
      _dataPerLabelList = (List<DataPerLabel>)deserializer.Deserialize(reader);
}

注意:由于您的列表包含相同类型的对象,因此我认为无需使用ArrayList,您只需使用List<DataPerLabel>。< / p>

答案 1 :(得分:0)

这样!

使用:

  

https://www.newtonsoft.com/json

存储列表:

List<DataPerLabel> lst = new List<DataPerLabel>();
string json = JsonConvert.SerializeObject(lst);
File.WriteAllText("path", json);

阅读清单:

string json = File.ReadAllText("path");
List<DataPerLabel> lst = JsonConvert.DeserializeObject<List<DataPerLabel>>(json);