SOAP消息反序列化
收到SOAP消息,需要对其反序列化为对象,求如何定义对象?<?xml version="1.0" encoding="GB2312"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<mbos:callResponse xmlns:mbos="mboss-esb">
<osb:recvData xmlns:osb="mboss-esb/osb">
<![CDATA[
content.
]]>
</osb:recvData>
</mbos:callResponse>
</soapenv:Body>
</soapenv:Envelope>
反序列化代码:
public static object SoapDeserialize(string txt)
{
object myObj;
System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();
byte[] data = utf8.GetBytes(txt);
using (MemoryStream ms= new MemoryStream(data))
{
SoapFormatter formatter = new SoapFormatter();
myObj = (object)formatter.Deserialize(ms);
}
return myObj;
}
--------------------编程问答-------------------- 估计没有人会啊!赶紧结贴吧!哈哈哈! --------------------编程问答-------------------- 不是吧~~~,SOAP很常见吧?! --------------------编程问答-------------------- 添加引用时,会生成代理类,同时相关的参数类、返回类也会生成在代理类的文件里。 --------------------编程问答-------------------- 没看明白你的意思 ?你返回的myObj不就是对象吗?你需要什么东西,再从myObj取不就可以了吗 --------------------编程问答-------------------- 你把myObj进行一下如下定义试试:
[DataContract]
[XmlRoot(Namespace = "", ElementName = "")]
[DataMember(Name = "", Order = 1)]
[XmlElement(ElementName = "")]
--------------------编程问答-------------------- 给你一个泛型xml反序列化方法:
public T Deserialize<T>(XElement xe)
{
T returnObject = default(T);
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
returnObject = (T)serializer.Deserialize(xe.CreateReader());
}
catch
{
}
return returnObject;
} --------------------编程问答-------------------- 在WebSerivce中不用自己去反序列化。直接用引用中的类型就可以了 --------------------编程问答-------------------- WCF的序列化/反序列化是通过DataContract来完成的,但是,DataContract只能操作xml element,不能序列化/反序列化XmlAttribute的,早期的SOAP是有人习惯用XmlAttribute,这个时候必须用XmlSerializer 进行反序列化的 --------------------编程问答-------------------- 要反序列化生成对象吗?
soap消息格式是固定的~~根据节点来作为类的属性不就完了?
补充:.NET技术 , Web Services