2017-09-25 78 views
1

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

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

Arraylist name = allData。

ArrayList在一个名为DataPerLabel的对象中接受这些数据。

配置选项卡:

Configuration tab

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

我想这个数组列表存储在一个.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上,因为它没有没有参数的构造函数。

希望有人能帮助,

感谢

+1

你应该看看保存文件到的app.config或用户配置文件使用[ConfigurationManager](https://msdn.microsoft.com/de-de/library/system.configuration.configurationmanager(v = vs.110).aspx) –

+0

让我看看,因为我说im完全新和学生,所以,无论如何,谢谢! – NielsSchutte

+0

将整个数组列表存储在文件中很容易使用序列化完成,并在启动时使用反序列化重新加载。但我宁愿使用@MarkusDeibel建议将数据存储在配置文件中。如果配置选项卡中的数据对于每个用户都不相同,那么我会将这些数据存储为用户设置,如果这些数据对于我将它们存储在配置文件中的每个用户都是相同的话。 – elloco999

回答

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); 
+0

我需要什么类型的文件来存储json对象?还是自动创建一个? string path = @“C:\\ Users \\ Gebruiker \\ Desktop \\ WindowsHMI \\”; 将无法​​正常工作? – NielsSchutte

+0

它会创建一个txt文件,你应该指定路径\\ filename –

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>代替。

+0

加载我的表单时,如何将所有这些数据放入同一个arraylist allData? – NielsSchutte

+0

既然你的列表只包含一个对象类型,那么我认为最好是用户List <>而不是ArrayList。 –

相关问题