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