Войти

Показать полную графическую версию : Вопрос по десериализаци


navab
27-11-2012, 16:46
Господа, прокомментируйте, пжст, вот какой момент.

В коде один из пользовательских типов заполняется из xml следующим образом:

XmlDocument document = new XmlDocument();
document .LoadXml(incomingXml);
XPathNavigator navigator = doc.CreateNavigator()
XPathNavigator routingNav = navigator.SelectSingleNode("looking for that it is necessary", namespace);
XmlSerializer s = new XmlSerializer(typeof(MyType));
using (StringReader r = new StringReader(routingNav.OuterXml))
{
using (XmlReader reader = XmlReader.Create(r))
{
mytype= (MyType)s.Deserialize(reader);
}
}

Все работает, но смущает, что использовать приходится и XPathNavigator, и StringReader, и XmlReader. Найти материалы про десериализацию, скажем, XPathNavigator напрямую не удалось. Есть ли более компактный способ десериализации?
Спасибо.

Tonny_Bennet
28-11-2012, 09:38
Я проще десериализовывал объекты:


public Module(string path)
{
Module mod;

XmlSerializer ModSerializer = new XmlSerializer(this.GetType());

using (StreamReader StrReader = File.OpenText(path))
{
mod = ModSerializer.Deserialize(StrReader) as Module;
}

}

navab
28-11-2012, 10:54
В таком случае выдает:
There is an error in XML document (0, 0).
хотя StringReader необходимый фрагмент XML содержит.

Tonny_Bennet
28-11-2012, 12:04
Скажите у вас не проходит десериализация уже сериализованного объекта. Или вы из некоторого XML файла пытаетесь восстановить объект?

navab
28-11-2012, 15:43
Сериализованный объект приходит как часть пакета. Из соответствующего этому объекту xml надо выдернуть определенный кусок, и на его основе десериализовать экземпляр, тип которого заранее определен

Tonny_Bennet
28-11-2012, 16:47
Можете привести примеры пакета, пример того что вы из него выдернули для десериализации.

А также создать тестовый экземпляр класса и сериализовать его. Покажите что получилось.

navab
29-11-2012, 11:08
Входной xml передается в метод как string (incomingXml в коде выше), далее XPathNavigator выбирается нужный элемент со всеми дочерними элементами и десериализуется как показано выше.

Tonny_Bennet
29-11-2012, 12:11
Покажите
Входной xml »

покажите результат
XPathNavigator выбирается нужный элемент со всеми дочерними элементами »

Также создайте элемент класса.
MyType »
сериализуйте его и выложите XML




© OSzone.net 2001-2012