我遇到的问题是将c#winforms列表框中的选定数据正确序列化为XML文件。
// save xml config
SessionConfig config = new SessionConfig();
foreach(String listitem in mylistbox.SelectedItems)
{
config.myItems = listitem;
}
config.Serialize(config);
这里是SessionConfig类
public class SessionConfig
{
// mylistbox
public string myItems { get; set; }
public void Serialize(SessionConfig details)
{
XmlSerializer serializer = new XmlSerializer(typeof(SessionConfig));
using (TextWriter writer = new StreamWriter(string.Format("{0}\\config.xml", Application.StartupPath)))
{
serializer.Serialize(writer, details);
}
}
}
这将输出如下的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<SessionConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<myItems>Item</myItems>
</SessionConfig>
我尝试做的是序列化所有所选项目,而不仅仅是一项。我想将每个项目放在父<Item>
节点下的<myItems>
标记中......就像这样:
<?xml version="1.0" encoding="utf-8"?>
<SessionConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<myItems>
<Item>Item</Item>
</myItems>
</SessionConfig>
然后我希望能够使用XML文件以语法方式设置列表框中选定的项目,但我不确定如何循环遍历节点值。
这是我到目前为止从配置文件中读取值的原因:
XmlDocument xml = new XmlDocument();
xml.Load(string.Format("{0}\\config.xml", Application.StartupPath));
XmlNode anode = xml.SelectSingleNode("/SessionConfig");
if (anode != null)
{
if (anode["MyItems"] != null)
}
答案 0 :(得分:0)
SessionConfig类中的myItems属性需要是一个列表。它目前只是一个字符串,您只能从列表框中获取最后一个值,因为您每次都会在config.myItems = listitem;
行覆盖前一个值
使用这样的结构可以获得您正在寻找的结构:
public Item MyItems { get; set; }
[CollectionDataContract(ItemName = "Item")]
public class Item : List<string>{}
然后,您可以使用config.myItems = listitem;
config.MyItems.Add(listItem)
添加每个项目
答案 1 :(得分:0)
Hello Friend我认为这个列表比struct
更好public interface ITestSerice {
bool FunctionA(int b);
}
public class TestService : ITestService {
public bool FunctionA(int b) {
return b > 0;
}
}