C# 保存值以供以后使用

C# 保存值以供以后使用,c#,arraylist,save,ini,C#,Arraylist,Save,Ini,案例:我正在创建一个从plc读取值的程序。为了读取这些值,需要填写配置选项卡。此配置选项卡将其所有值放入arraylist。如果程序关闭,它会丢失所有的配置数据,我想做一个函数来保存这些配置数据。我对这些东西完全陌生,我很好奇你们是否有答案和/或示例代码。我正在考虑存储完整的arraylist,并在打开此文件时读取 正如你可能已经看到的,我已经创建了一个菜单 Arraylist name=allData ArrayList在名为DataPerLabel的对象中接受此数据 配置选项卡: 类别Da

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

正如你可能已经看到的,我已经创建了一个菜单

Arraylist name=allData

ArrayList在名为DataPerLabel的对象中接受此数据

配置选项卡:

类别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文件中

我现在已经试过了:

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上不可能序列化,因为它没有无参数的构造函数

希望有人能帮忙


谢谢

您可以将数据保存为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);
}
List\u dataPerLabelList;//这是您的数据对象。
.
.
.
//保存时:
XmlSerializer serializer=新的XmlSerializer(typeof(List));
使用(XmlWriter=XmlWriter.Create(您的文件路径,新的XmlWriterSettings(){Indent=true}))
{
serializer.Serialize(writer,_dataPerLabelList);
}
.
.
.
//加载表单时:
XmlSerializer反序列化器=新的XmlSerializer(typeof(List));
使用(XmlReader=XmlReader.Create(yourFilePath))
{
_dataPerLabelList=(列表)反序列化器。反序列化(读取器);
}

注意:由于您的列表包含相同类型的对象,因此我认为不需要使用
ArrayList
,您只需使用
list

您可以将数据另存为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);
}
List\u dataPerLabelList;//这是您的数据对象。
.
.
.
//保存时:
XmlSerializer serializer=新的XmlSerializer(typeof(List));
使用(XmlWriter=XmlWriter.Create(您的文件路径,新的XmlWriterSettings(){Indent=true}))
{
serializer.Serialize(writer,_dataPerLabelList);
}
.
.
.
//加载表单时:
XmlSerializer反序列化器=新的XmlSerializer(typeof(List));
使用(XmlReader=XmlReader.Create(yourFilePath))
{
_dataPerLabelList=(列表)反序列化器。反序列化(读取器);
}
注意:由于您的列表包含相同类型的对象,因此我认为没有必要使用
ArrayList
,您只需使用
list

这样

使用:

存储列表:

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);
List lst=new List();
字符串json=JsonConvert.SerializeObject(lst);
WriteAllText(“路径”,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);
string json=File.ReadAllText(“路径”);
List lst=JsonConvert.DeserializeObject(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);
List lst=new List();
字符串json=JsonConvert.SerializeObject(lst);
WriteAllText(“路径”,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);
string json=File.ReadAllText(“路径”);
List lst=JsonConvert.DeserializeObject(json);


您应该考虑使用“让我检查”将文件保存到app.config或用户配置文件中,正如我所说,我是全新的学生,因此,无论如何,谢谢!使用序列化可以轻松地将整个arraylist存储在文件中,并在启动时使用反序列化再次加载它。但我更倾向于@MarkusDeibel建议将数据存储在配置文件中。如果每个用户的“配置”选项卡中的数据不同,我会将数据存储为用户设置,如果每个用户的数据相同,我会将它们存储在配置文件中。另外,
ArrayList
是一个非通用的集合,几乎完全被
List
取代。我强烈建议您在几乎所有情况下都使用通用集合。您应该考虑使用“让我检查”将文件保存到app.config或用户配置文件中,正如我所说,我是全新的学生,所以,无论如何,谢谢!使用序列化可以轻松地将整个arraylist存储在文件中,并在启动时使用反序列化再次加载它。但我更倾向于@MarkusDeibel建议将数据存储在配置文件中。如果每个用户的“配置”选项卡中的数据不同,我会将数据存储为用户设置,如果每个用户的数据相同,我会将它们存储在配置文件中。另外,
ArrayList
是一个非通用的集合,几乎完全被
List
取代。我强烈建议您在几乎所有情况下都使用泛型集合。加载我的表单时,如何将所有这些数据放入同一arraylist allData?由于您的列表只包含一种对象类型,因此我认为最好使用user list而不是arraylist。加载我的表单时,如何将所有这些数据放在同一个arraylist allData中?因为您的列表只包含一种对象类型,所以我认为最好使用user list而不是arraylist。我需要将json对象存储在什么类型的文件中?还是自动创建一个?字符串路径=@“C:\\Users\\Gebruiker\\Desktop\\WindowsHMI\\”;无法正常工作?它将创建一个txt文件,您应该在存储json对象所需的文件类型中指定路径\\filename?还是自动创建一个?字符串路径=@“C:\\Users\\Gebruiker\\Desktop\\WindowsHMI\\”;无法正常工作?它将创建一个txt文件,您应该指定路径\\文件名