将XML消息反序列化为对象

时间:2011-07-06 17:58:05

标签: c# .net xml-serialization

我正在编写一个使用HTTP传输XML消息的协议的客户端。它是同步的,因为我形成一个遵循DTD的XML文档,并通过POST与WebClient类将其发送到协议的网关,我从远程服务器获得XML响应消息,以指示事务状态/消息ID /等。 / p>

由于我有DTD,是否可以用它创建类?对于我的XML消息正在执行的每种类型的“操作”,有一些可能的响应,并且具有可由返回的服务器XML水合的类将是有利的。

一旦有了这些类,将XML消息从服务器反序列化为对象的基本步骤是什么?

2 个答案:

答案 0 :(得分:4)

将DTD转换为XSD(不确定是否仍需要此步骤):

Free DTD to XSD conversion utility?

从XSD生成C#类(命令行工具,我就是这样做的,不确定是否有更好的方法):

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

从XML序列化回到类:

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

答案 1 :(得分:1)

一旦你有了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;
}