通过Web服务传递序列化对象与传递对象

时间:2010-08-06 17:57:24

标签: web-services serialization namespaces

我在C#.NET中有一个带有以下命名空间的Web服务:

[WebService (Namespace = "http://enterpriseName/wsName")]

Web服务包含WebMethod GetServiceObject和类MyObject。 此Web方法返回一个字符串,其内容是MyObject的序列化实例。

[WebMethod (MessageName = "GetServiceObjectXML" Description = "Get ServiceObject from Server to Client")]  
public string GetServiceObjectXML ()

此方法返回以下XML:

<? Xml version = "1.0" encoding = "utf-16"?>
<ServiceObject Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Services>
 <service>
  <id>3</id>
  <date>02/08/2010</date>
 </service>
</Services>
</ServiceObject>

我遇到的问题是,当我从客户端调用此方法并尝试将此xml反序列化为类MyObject时,我得到一个NULL对象。

之后我创建了一个具有以下签名的新WebMethod:

[WebMethod (MessageName = "GetServiceObject" Description = "Get ServiceObject from Server to Client")]
public MyObject GetServiceObject ()

当我从客户端调用此方法时,我正确地填充了对象,我也可以顺利地序列化对象,但序列化的结果是以下xml:

<? Xml version = "1.0" encoding = "utf-16"?>
<ServiceObject Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Services Xmlns="http://enterpriseName/wsName">
 <service>
  <id>3</id>
  <date>02/08/2010</date>
 </service>
</Services>
</ServiceObject>

与WebMethod GetServiceObjectXML生成的xml不同。

我如何解决这个问题,因为我打算在同一个Web服务和同一个客户中使用这两种方法?

1 个答案:

答案 0 :(得分:1)

显而易见的答案是,修复GetServiceObjectXML()以返回与GetServiceObject()相同的XML。差异似乎是框架序列化的对象具有指定的不同XML命名空间。无论您使用什么方法将对象序列化为GetServiceObjectXML()中的XML,都不会这样做。