Существует маленький штраф на вызов виртуальной функции по сравнению с регулярным вызовом. Вы вряд ли будете наблюдать различие, если Вы не сделаете сотни тысяч вызовов в секунду, и цену часто стоит заплатить за добавленную ясность кода так или иначе.
Если у вас установлен WCF Rest Starter Kit предварительного просмотра, есть ловкий трюк:
. Это вставит ваш XML, который из буфера обмена в ваш проект как класс C #, способный десериализовать именно этот XML.
См. Эти сообщения в блоге об этом:
Это должно вас сильно сэкономить печатать и сделать жизнь намного проще!
ОБНОВЛЕНИЕ:
Хорошо, у вас уже есть классы, сгенерированные из возвращаемого XML. Теперь вам нужно преобразовать XmlNode
в свой класс.
Вам нужно будет сделать что-то вроде этого:
private static T ConvertNode<T>(XmlNode node) where T: class
{
MemoryStream stm = new MemoryStream();
StreamWriter stw = new StreamWriter(stm);
stw.Write(node.OuterXml);
stw.Flush();
stm.Position = 0;
XmlSerializer ser = new XmlSerializer(typeof(T));
T result = (ser.Deserialize(stm) as T);
return result;
}
Вам нужно написать представление XML (свойство .OuterXml
) XmlNode
в поток (здесь MemoryStream
), а затем используйте XmlSerializer
для обратной сериализации объекта из этого потока.
Вы можете сделать это с помощью универсального метода и вызова
Customer myCustomer = ConvertNode<Customer>(xmlNode);
, или вы даже можете превратить этот код в любой метод расширения в классе XmlNode
, чтобы вы могли написать:
Customer myCustomer = xmlNode.ConvertNode<Customer>();
Marc
Самый простой способ сделать это - использовать встроенный класс System.Xml.Serialization.XmlSerializer в .NET. Поиск в Google по XmlSerializer предоставит массу руководств, которые вы можете использовать, чтобы найти учебное пособие, которое подойдет вам.