C#-一个类的数组,该数组包含另一个类中的数组,在XML中可读/写
本文关键字:数组 XML 另一个 C#- 包含 一个 | 更新日期: 2023-09-27 18:28:34
我的主要目标是创建一个带有变量的类(让我们称之为test1
),其中一个变量是数组。另一个类(我们称之为test2
)将包含其他变量,其中一些是test1
类的数组。
数组的大小是可变的,并不是完全固定的。我希望能够在运行时增加/减少它们的大小。我还希望它对文件(如XML)是可写和可读的。所以,根据我的理解,它必须能够被"序列化"。
它看起来像这样吗?
public class test1
{
public String test1_name;
public String test1_id;
public Single test1_value;
public String[] test1_list;
}
public class test2
{
public test1[] test2_list1;
public test1[] test2_list2;
public String[] test2_list;
}
我已经设法弄清楚了如何使用XML序列化来编写文件,例如:
System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(typeof(test_a)); //test_a being a simple class holding a simple variable
var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "//tester.txt";
System.IO.FileStream file = System.IO.File.Create(path);
writer.Serialize(file, tester);
file.Close();
我想确保我可以写入和读取这些数据(可以是XML或二进制,我稍后会决定),并在运行时对其进行修改,同时可以调整数组大小。
我是不是搞错了?我将如何构建它并使其可用、可保存/可读?
有人能帮助我走上正轨,实现我想要实现的目标吗?我知道这可能是一个很大的要求,但如果有一些例子,我们将不胜感激。
你似乎做得很好。你的代码已经工作了。
我创建这个数据是为了测试它。
var tester = new test2()
{
test2_list1 = new[]
{
new test1()
{
test1_name = "11",
test1_id = "12",
test1_value = 3.1f,
test1_list = new string[] { "14", "15", "16", },
},
new test1()
{
test1_name = "21",
test1_id = "22",
test1_value = 3.2f,
test1_list = new string[] { "24", "25", "26", },
},
},
test2_list2 = new[]
{
new test1()
{
test1_name = "31",
test1_id = "32",
test1_value = 3.3f,
test1_list = new string[] { "34", "35", "36", },
},
new test1()
{
test1_name = "41",
test1_id = "42",
test1_value = 3.4f,
test1_list = new string[] { "44", "45", "46", },
},
},
test2_list = new string[] { "X", "Y", "Z", },
};
我使用以下代码对其进行了序列化:
System.Xml.Serialization.XmlSerializer serializer
= new System.Xml.Serialization.XmlSerializer(typeof(test2));
var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "//tester.txt";
using (System.IO.FileStream file = System.IO.File.Create(path))
{
serializer.Serialize(file, tester);
file.Flush();
}
我得到了这个XML:
<?xml version="1.0"?>
<test2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<test2_list1>
<test1>
<test1_name>11</test1_name>
<test1_id>12</test1_id>
<test1_value>3.1</test1_value>
<test1_list>
<string>14</string>
<string>15</string>
<string>16</string>
</test1_list>
</test1>
<test1>
<test1_name>21</test1_name>
<test1_id>22</test1_id>
<test1_value>3.2</test1_value>
<test1_list>
<string>24</string>
<string>25</string>
<string>26</string>
</test1_list>
</test1>
</test2_list1>
<test2_list2>
<test1>
<test1_name>31</test1_name>
<test1_id>32</test1_id>
<test1_value>3.3</test1_value>
<test1_list>
<string>34</string>
<string>35</string>
<string>36</string>
</test1_list>
</test1>
<test1>
<test1_name>41</test1_name>
<test1_id>42</test1_id>
<test1_value>3.4</test1_value>
<test1_list>
<string>44</string>
<string>45</string>
<string>46</string>
</test1_list>
</test1>
</test2_list2>
<test2_list>
<string>X</string>
<string>Y</string>
<string>Z</string>
</test2_list>
</test2>
我能够使用以下代码进行反序列化:
using (System.IO.FileStream file = System.IO.File.OpenRead(path))
{
test2 x = (test2)serializer.Deserialize(file);
}