В C#, как я могу десериализовать XML-документ, содержащий список элементов без окружающего элемента списка

Надо надеяться, вопрос с очень простым ответом, но это не то, которое я смог найти. У меня есть маленький XML-документ, который примерно походит на это:

<aa>
  <bb><name>bb1</name></bb>
  <bb><name>bb2</name></bb>
  <bb><name>bb3</name></bb>
</aa>

У меня есть классы, которые представляют aa и bb

[XmlRoot("aa")]
public class aa
{
  [XmlArray("bbs")]
  [XmlArrayItem("bb")]
  public bb[] bbs;
}

public class bb
{
  [XmlElement("name")]
  public string Name;
}

Когда я пытаюсь десериализовать документ с помощью XmlSerializer, я получаю объект aa с пустым указателем bbs свойство. Насколько я понимаю это вызвано тем, что атрибуты, которые я использовал на bbs свойстве, говорят сериализатору ожидать документ как это:

<aa>
  <bbs>
    <bb><name>bb1</name></bb>
    <bb><name>bb2</name></bb>
    <bb><name>bb3</name></bb>
  </bbs>
</aa>

Учитывая, что я не могу изменить формат XML, я получаю, там способ сказать XmlSerialiser ожидать массив, который не перенесен в другом теге?

6
задан Dan 6 January 2010 в 11:02
поделиться

2 ответа

Попробуйте заменить свои [XmlArray("bbs")] и [XmlArrayItem("bb")] атрибуты на один атрибут [XmlElement]

[XmlRoot("aa")]
public class aa
{
  [XmlElement("bb")]
  public bb[] bbs;
}

public class bb
{
  [XmlElement("name")]
  public string Name;
}

, поместив атрибуты Array и ArrayItem внутрь, вы явно описывали, как сериализовать это в виде массива с оберточным контейнером.

8
ответ дан 9 December 2019 в 20:44
поделиться

Измените свой [XmlArray]/[XmlArrayItem] на [XmlElement], что говорит сериализатору о том, что элементы не имеют обёртки, е. g.

[XmlRoot("aa")]
public class aa
{
  [XmlElement("bb")]
  public bb[] bbs;
}

public class bb
{
  [XmlElement("name")]
  public string Name;
}
4
ответ дан 9 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: