C# 将XML消息反序列化为对象

C# 将XML消息反序列化为对象,c#,.net,xml-serialization,C#,.net,Xml Serialization,我正在为使用HTTP传输XML消息的协议编写一个客户端。它是同步的,因为我形成了一个遵循DTD的XML文档,并通过WebClient类的POST将其发送到协议网关,然后从远程服务器获得一条XML响应消息,以指示事务状态/消息ID/等等 既然我有DTD,是否可以用它创建类?对于我的XML消息正在执行的每种类型的“操作”,都有一些可能的响应,而拥有可以被返回的服务器XML水合的类将是有利的 一旦有了这些类,将来自服务器的XML消息反序列化为对象的基本步骤是什么?将DTD转换为XSD(不确定是否仍然需

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

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

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

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

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

从XML序列化回类:


一旦有了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;
}
公共静态T GetObjectFromXmlString(字符串xml) { T结果=默认值(T); if(string.IsNullOrEmpty(xml)) 返回结果; 使用(StringReader sr=新的StringReader(xml)) { 使用(XmlTextReader xr=新的XmlTextReader(sr)) { XmlSerializer serializer=新的XmlSerializer(typeof(T)); 结果=(T)序列化程序。反序列化(xr); } } 返回结果; }
不错,我得试试。你能为我问题的另一部分找到解决办法吗?我想要一个简单的过程来从DTD生成类。我会尝试Eric H的建议,但我希望.Net或VS2010会有一个工具来帮助实现这一点。我没有更好的方法从DTD生成类。我不确定您的需求,但如果您必须生成一次(dtd是静态的),我会使用一些工具。但如果必须动态生成类,则可以读取dtd文件并使用反射创建类或程序集。只是一个想法。是的,我使用了一个工具,因为它是静态的,因为它是一个协议。顺便说一句,使用块不关闭/处理StringReader和XmlTextReader吗?我不认为显式close()调用是必要的。你是对的。我认为你不需要它。我将编辑答案。此外,这是一个示例,请确保处理异常等。这肯定会让我开始着手做我要做的事情。我使用trang将DTD转换为XSD,并从新的XSD文件生成类。从这里完成序列化和反序列化的代码应该很容易。谢谢