2011-07-06 26 views
7

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

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

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

回答

4

隐蔽到XSD(不知道是否仍然需要这一步)的DTD:

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

+0

这绝对让我开始了我的设定。我使用trang将DTD转换为XSD,并从新的XSD文件生成类。应该很容易完成从这里序列化和反序列化的代码。谢谢! – jlafay

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; 
} 
+0

不错,我得试试看。你会碰巧解决我的问题的另一部分?我想要一个简单的过程来从DTD生成类。我会尝试Eric H的建议,但我希望.Net或VS2010会有一个工具来帮助解决这个问题。 – jlafay

+0

我没有更好的从DTD生成类的方法。我不确定你的要求,但如果你必须产生一次(dtd是静态的),我会用一些工具。但如果您必须动态生成类,则可以读取dtd文件并使用反射来创建类或程序集。只是一个想法。 –

+0

是的,我使用了一个工具,因为它是一个协议,因为它是静态的。 – jlafay