Используйте XDocument в качестве источника для XmlSerializer. Десериализовать?

Я думаю с помощью функции, прекрасен.

более интересный вопрос состоит в том, как Вы определяете который регистратор загрузиться? Одна опция состоит в том, чтобы иметь абстрактный класс Регистратора, который конкретные реализации разделяют на подклассы, затем выполняют итерации по __subclasses__() вызов is_registrar_for() метод класса:

class Registrar(object):
  def __init__(self, domain):
    self.domain = domain

class RegistrarA(Registrar):
  @classmethod
  def is_registrar_for(cls, domain):
    return domain == 'foo.com'

class RegistrarB(Registrar):
  @classmethod
  def is_registrar_for(cls, domain):
    return domain == 'bar.com'


def Domain(domain):
  for cls in Registrar.__subclasses__():
    if cls.is_registrar_for(domain):
      return cls(domain)
  raise ValueError


print Domain('foo.com')
print Domain('bar.com')

Это позволит Вам прозрачно добавить новый Registrar с и делегировать решение, которых доменов каждый поддерживает им.

36
задан James Skemp 5 January 2013 в 02:11
поделиться

2 ответа

Вы можете использовать XDocument.CreateReader () для создания XmlReader , который считывает содержимое XDocument .

] Аналогично, следующее тоже будет работать:

XmlReader GetReader(XDocument doc)
{
    return doc.Root.CreateReader();
}
49
ответ дан 27 November 2019 в 05:51
поделиться

Просто подумал, что должен добавить, что после создания XmlReader, т.е.:

XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
XmlReader reader = xmlDocumentToDeserialize.CreateReader();

затем вы должны вызвать:

reader.MoveToContent();

потому что иначе читатель не будет "указывать" на первый узел, вызывая появление пустого читателя! Затем можно смело вызывать Deserialize:

MyObject myObject = (MyObject)serializer.Deserialize(reader);
0
ответ дан 27 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

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