Nano Hash - криптовалюты, майнинг, программирование

Можно ли десериализовать xml в объект списка, используя атрибуты сериализации, предоставленные .net?

У меня есть ввод xml, который выглядит так (например, используется упрощенная версия):

<Student>
<Subject> History </Subject>
<Subject> English </Subject>
</Student>

Есть ли способ десериализовать приведенный выше xml в объект, класс которого выглядит так:

[Serializable]
[XmlRoot(ElementName = "Student", Namespace="")]
class Student
{
  public Student()
  {
    Subject = new List<string>();
  }

  public List<string> Subject {get;set;}

}

Примечание. Я пытаюсь выяснить, можно ли это сделать без реализации интерфейса IXmlSerializable, и я хочу использовать список для хранения значений Subject (а не строку [], которая, как я знаю, возможна Я использую атрибут XmlElement).

29.01.2010

  • Возможно, вы сталкиваетесь с ошибками? 29.01.2010
  • brb, NetDataContractSerializer. 29.01.2010

Ответы:


1

Украсьте свойство Subject атрибутом XmlArrayAttribute.

[XmlArray]
public List<string> Subject { get; set; }

Если вам нужно опустить элемент Subject и разместить записи Subject непосредственно после Student, вы можете просто использовать атрибут [XmlElement]:

[XmlElement]
public List<string> Subject { get; set; }

Сериализация этого с помощью класса Student приводит к выводу, подобному этому:

<?xml version=\"1.0\" encoding=\"utf-16\"?>
<Student xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
    <Subject>History</Subject>
    <Subject>English</Subject>
</Student>"
29.01.2010
  • Можете ли вы все еще использовать список для этого? Я думал, что он выдает ошибку, если он не сериализуется в массив. 29.01.2010
  • На самом деле вы правы, вы также можете применить его к коллекциям и полям, которые возвращают ArrayList или к любому полю, которое возвращает объект, реализующий интерфейс IEnumerable. msdn.microsoft.com/en-us/library/ 29.01.2010
  • Согласно документации, он работает со всем, что реализует IEnumerable. IIRC, это правильно, но это было давно... 29.01.2010
  • он не работает с атрибутом XmlArray. Я предполагаю, что сейчас просто изменю его на массив и украсю поле атрибутом XmlElement... 29.01.2010
  • Да, это работает (я только что проверил), но я отредактировал свой ответ, добавив больше вариантов. 29.01.2010
  • +1 для атрибута XmlElement. Это работало в моем окружении. FWIW, атрибут XmlArray у меня тоже не работал. 29.01.2010
  • Спасибо, Марк.. использование XmlElement действительно работает со СПИСКОМ.. Я думал, что пробовал это раньше, и не заставлял его работать.. должно быть, я делаю что-то еще неправильно.. 29.01.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..