2010-12-11 5 views
1

Я пытаюсь найти простой способ записи XML с помощью XmlReader/XmlWriter. Мне не очень нравится использовать интерфейс «IXmlSerializable», но у меня нет выбора для некоторых из моих dataclass.Как читать/писать сложный объект с помощью XmlWriter/XmlReader

Во всяком случае, то, что я хочу сделать, это довольно просто:

private MyClass myObject; 
public void WriteXml(XmlWriter writer) 
{ 
    writer.WriteObject(myObject); // <-- this method doesn't exists 
} 

Итак, я нашел 2 работы вокруг:

  1. Напишите свою собственную процедуру, чтобы написать свой объект вручную. Довольно смешно, так как .Net уже делает это.
  2. Создайте новый сериализатор с помощью StringWriter и используйте метод WriteValue (string).

Я еще не тестировал второе, но думаю, что он, вероятно, будет работать (не уверен из-за результата ReadValue).

Тогда мой вопрос: я пропустил что-то важное или это единственный способ? Или есть лучший способ справиться с этим?

Спасибо.

+0

Вы видели LINQ to XML? Это немного или работает, но работает. – Pieter

+0

Да, я знаю эту идею, но никогда не использовал ее. Но здесь моя проблема заключается в том, что у моего сложного объекта есть много вспомогательных объектов, и каждый из них определяет XmlAttributes. Поэтому мне нужно прочитать эти атрибуты. Я просто не хочу писать слепые элементы. – Sauleil

ответ

2

После игры я нашел что-то очень простое. Вот код, который я играл с тех, кто задается вопросом, как я исправил мою проблему (аналогично для чтения и элемента):

public static void WriteElement(XmlWriter writer, string name, object value) 
    { 
     var serializer = new XmlSerializer(value.GetType(), new XmlRootAttribute(name)); 
     serializer.Serialize(writer, value); 
    } 

Я не знаю, почему я усложняя проблему, но она не может быть больше проще, чем это.

0

Попробуйте использовать класс XmlDocument. Он использует XmlNode в качестве основы для простой записи xml. Вы также можете сериализовать класс или использовать класс DataSet для записи xml или прочитать его обратно в структуру набора данных или структуру типа XmlDocument.

Смежные вопросы