XML序列化 - 序列化选定的列表框项

时间:2014-03-18 13:40:58

标签: c# xml-serialization

我遇到的问题是将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) 
}

2 个答案:

答案 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;
    }
}