Десериализовать XML-сообщения в объекты - PullRequest
7 голосов
/ 06 июля 2011

Я пишу клиент для протокола, который использует HTTP для передачи сообщений XML. Это синхронно, потому что я формирую XML-документ, который следует за DTD, и отправляю его в шлюз для протокола через POST с классом WebClient, и я получаю ответное сообщение XML с удаленного сервера, чтобы указать состояние транзакции / идентификатор сообщения / и т. Д.

Поскольку у меня есть DTD, можно ли с его помощью создавать классы? Существует несколько возможных ответов для каждого типа «операций», выполняемых моим XML-сообщением, и было бы полезно иметь классы, которые могут обрабатываться возвращаемым сервером XML.

Как только у меня появятся эти классы, каковы основные этапы десериализации XML-сообщения с сервера в объекты?

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

Преобразование DTD в XSD (не уверен, что этот шаг все еще требуется):

Бесплатная утилита преобразования DTD в XSD?

Создание класса C # из XSD(инструмент командной строки, вот как я это делаю, не уверен, что есть лучший способ):

http://quickstart.developerfusion.co.uk/quickstart/howto/doc/xmlserialization/XSDToCls.aspx

Сериализация обратно в класс из XML:

http://support.microsoft.com/kb/815813

1 голос
/ 06 июля 2011

когда у вас есть строка xml, вы можете сделать что-то вроде этого, где T - ваш общий объект.

public static T GetObjectFromXmlString<T>(string xml)
{
    T result = default(T);

    if (string.IsNullOrEmpty(xml))
        return result;

    using (StringReader sr = new StringReader(xml))
    {
        using (XmlTextReader xr = new XmlTextReader(sr))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            result = (T)serializer.Deserialize(xr);
        }                   
    }

    return result;
}
...