XMLSerializer не записывает элементы в список - PullRequest
0 голосов
/ 15 января 2010

Я пишу программу, которая в основном сделает для большинства пользователей локальную копию хранилища 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>

Это мой основной код, текст флажка имеет форматированное имя для поиска в качестве его текста (бухгалтерия *, например, чтобы получить учет пользователей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 ]

2 голосов
/ 15 января 2010

Свойства вашего windowsUserEntry класса доступны только для чтения. Сериализация XML может только сериализовать свойства чтения-записи

1 голос
/ 16 января 2010

Если вы включите пустые установщики для свойств windowsUserEntry, вы сможете сериализовать (но не десериализовать). Или вы можете выбросить исключение (NotImplementedException?) В установщики. Я не думаю, что есть какой-либо другой способ сериализации ваших объектов, кроме реализации вашей собственной сериализации Xml.

...