当前位置: 代码迷 >> Web Service >> 使用WebService中对象反序列化的有关问题
  详细解决方案

使用WebService中对象反序列化的有关问题

热度:1193   发布时间:2011-12-15 23:41:24.0
使用WebService中对象反序列化的问题
这个是c#,.net基本的问题,但是问题来自使用WebService的过程。。。

我有一个 Web Service方法:
C# code

public string SaveJinChengJiLu(ProcessInfoRecord[] pirArray);



WebService document内容提到 SOAP 1.1 请求时,发送格式如下:
XML code

POST /ChkService/Receiver.asmx HTTP/1.1
Host: 192.168.0.222
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.tempurl.com/SaveJinChengJiLu"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <AuthHeaderCS xmlns="http://www.tempurl.com/">
      <UserID>string</UserID>
      <Password>string</Password>
    </AuthHeaderCS>
  </soap:Header>
  <soap:Body>
    <SaveJinChengJiLu xmlns="http://www.tempurl.com/">
      <pirArray>
        <ProcessInfoRecord>
          <RecordID>int</RecordID>
          <TaskWorkingID>string</TaskWorkingID>
          <ProcessName>string</ProcessName>
          <ProcessAddress>long</ProcessAddress>
          <ProcessID>int</ProcessID>
          <IsHidden>int</IsHidden>
          <Signature>int</Signature>
          <ProcessPath>string</ProcessPath>
        </ProcessInfoRecord>
        <ProcessInfoRecord>
          <RecordID>int</RecordID>
          <TaskWorkingID>string</TaskWorkingID>
          <ProcessName>string</ProcessName>
          <ProcessAddress>long</ProcessAddress>
          <ProcessID>int</ProcessID>
          <IsHidden>int</IsHidden>
          <Signature>int</Signature>
          <ProcessPath>string</ProcessPath>
        </ProcessInfoRecord>
      </pirArray>
    </SaveJinChengJiLu>
  </soap:Body>
</soap:Envelope>



重点是 pirArray 节的内容

.Net框架通过一个我不知道的方法 把 上述数据构造了一个 ProcessInfoRecord 数组类型的 对象 pirArray

我的客户端程序是用 sproxy.exe 生成的 .h文件
这里产生的问题是,增加一个类别就增加一个webservice方法,管理起来很累人。
因为该工具有个bug,不知道什么样的方法名字符序列会导致sproxy.exe生成不了正确的 .h

所以我想,只用一个下面的接口
public string SaveData(int type, string xmlStr);

xmlStr为客户端拼接的串,这个应该是 ProcessInfoRecord [] 类型对象的序列化内容,然后通过一个我现在想要询问的一个方法给反序列化,最终生成对象 ProcessInfoRecord []pirArray;
请问有没有方法可以直接利用pirArray 的结构?如何反序列化?
这个不行的话,有其他方法吗?谢谢

------解决方案--------------------
这个问题我也遇见过,的确是,每添加一个类别WS就会多出一个对应的代理类,你还得为新类别写新的方法

而且序列化是需要类别,如果你传递通用XML string,到了服务器端没有对应的类别无法序列化。

你可以采用这样通用的方式public string SaveData(int type, DataSet xmlStr);
DataSet是微软WS通用的格式,你可以把数据保存在DataSet中,在服务器端自己解析

------解决方案--------------------
探讨
引用:
你可以用C#作个WebService客户端,然后用COM包装,让C,C++用。


这个我现在再试

不过 用COM封装与 对象序列化、反序列化没什么关系吧?

不过我发现了一个 XmlSerializer 可以了。多谢关注。
  相关解决方案