XMLSerializer不在列表中编写元素

时间:2010-01-15 17:18:22

标签: c# xml-serialization

我正在编写一个程序,它基本上会为用户在本地计算机SAM存储中制作大多数内容的xml副本。

目前它只为每个用户打印一个XMLElement,但它不打印它们的属性。

<?xml version="1.0" encoding="utf-8"?>
<WindowsUserList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <windowsUserEntry />
  <windowsUserEntry />
  ...
  <windowsUserEntry />
  <windowsUserEntry />
</WindowsUserList>

这是我的主要代码,复选框文本将搜索的格式化名称作为其文本(例如,记帐*以获取用户accounting 1,2,3等等。)

windowsUserList listUsers = new windowsUserList();
PrincipalContext context = new PrincipalContext(ContextType.Machine, Settings.Default.ipAddress, Settings.Default.username, Settings.Default.password);
foreach (CheckBox cbx in groupBox1.Controls.OfType<CheckBox>())
{
  if (cbx.Checked)
  {
    UserPrincipal usr = new UserPrincipal(context);
    if (cbx.Text == "")
    {
      usr.Name = txtCustom.Text;
    }
    else
    {
      usr.Name = cbx.Text;
    }
    PrincipalSearcher search = new PrincipalSearcher(usr);
    PrincipalSearchResult<Principal> results = search.FindAll();
    foreach (Principal result in results)
    {
      listUsers.AddUser(new windowsUserEntry((UserPrincipal)result));
    } // foreach (Principal result in results)
  }//if (cbx.Checked)
}//foreach (CheckBox cbx in groupBox1.Controls.OfType<CheckBox>())
XmlSerializer s = new XmlSerializer(typeof(windowsUserList));
TextWriter w = new StreamWriter(dlgSave.OpenFile());
s.Serialize(w, listUsers);
w.Close();

Windows用户列表/条目的代码很长,所以我将其发布到pastebin

2 个答案:

答案 0 :(得分:2)

windowsUserEntry类的属性是只读的。 XML序列化只能序列化读写属性

答案 1 :(得分:1)

如果为windowsUserEntry的属性包含空的setter,则可以序列化(但不反序列化)。或者您可以在setter中抛出异常(NotImplementedException?)。我认为除了实现自己的Xml序列化之外,没有任何其他方法可以序列化您的对象。