c# - 如何保存/读取列表在 XML 中?
问题描述
我尝试如下保存/读取 XML 中的列表。
类创建列表:
public class CreateList
{
public List<string> createListBuild()
{
var itemsList = new List<string> { "item1", "item2", "item3" };
return itemsList;
}
}
类 ConfigWrapper:
[XmlRoot(Namespace = "", ElementName = "collection")]
public class ConfigWrapper
{
[XmlElement("item")]
public List<string> Items { get; set; }
}
类 WriteReadList:
public class WriteReadList
{
// Запись в XML
public void WriteXML(List<string> itemsList)
{
var cfgIn = new ConfigWrapper { Items = itemsList };
var xs = new XmlSerializer(typeof(ConfigWrapper));
//string fileContent = "ListXML";
// string fileContent = @".\ListXML.xml";
string fileContent = @".\ListXML.xml";
using (var sw = new StringWriter())
{
xs.Serialize(sw, cfgIn);
fileContent = sw.ToString();
// Console.WriteLine(fileContent);
}
}
public void ReadXML(string fileContent)
{
ConfigWrapper cfgOut = null;
using (var sr = new StringReader(fileContent))
{
var xs = new XmlSerializer(typeof(ConfigWrapper));
cfgOut = xs.Deserialize(sr) as ConfigWrapper;
// cfgOut.Dump(); //view in LinqPad
// if (cfgOut != null)
// yields 'item2'
// Console.WriteLine(cfgOut.Items[1]);
}
}
}
我使用以下按钮实现逻辑:
List<string> listWork;
CreateList createList;
private void button1_Click(object sender, EventArgs e)
{
listWork = createList.createListBuild();
}
// Сохранить в XML
private void button3_Click(object sender, EventArgs e)
{
// Конфигурация обёртки
ConfigWrapper config = new ConfigWrapper();
config.Items = listWork;
WriteReadList writeReadList = new WriteReadList();
writeReadList.WriteXML(config.Items);
}
我无法使代码工作如何做正确的事情?如何List<string>
从位于“* .exe”项目文件旁边的 XML 文件中进行保存/读取?或者如何更容易地做到这一点?
解决方案
使用时必须传递xml文件的完整路径StringWriter
例如:
//get path of the .exe
string executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
//Combine the name of the xml file to get the path of the xml
string xmlPath = Path.Combine(executableLocation, "ListXML.xml");
using (var sw = new StringWriter(xmlPath))
{
xs.Serialize(sw, cfgIn);
}
推荐阅读
- python - 如何在列表中找到相似的数字并为列表中存在的每个数字设置一个值?
- r - 使用 geom_rec 的 ggplot 中的矩形颜色
- javascript - .push() 和 .reduce() 如何在这里协同工作?(斐波那契)
- docker - 使用私有注册表中的映像部署 pod 时发生 CrashLoopBackOff
- javascript - 使用 MaterialUI 输入组件时如何将光标放在文本的开头并将焦点移动到开头
- java - 何在 Vertx 中禁用 TLS 1.3,它在与 MmongoDB 客户端连接时产生问题
- reactjs - 反应 useRef typescript child forwardedRef 类型
- ssl - 如何使用 https haproxy 检查后端服务器的运行状况
- python-xarray - 如何撤消 xarray.groupby?
- windows - docker for windows 运行量角器自动化