【问题标题】:Passing serialized object through web service vs. Passing the object通过 Web 服务传递序列化对象与传递对象
【发布时间】:2010-08-06 17:57:24
【问题描述】:

我在 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 服务和同一个客户中使用这两种方法,我该如何解决这个问题?

【问题讨论】:

    标签: web-services serialization namespaces


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2013-10-13
      • 2017-10-22
      • 1970-01-01
      • 2014-07-30
      • 2011-12-02
      相关资源
      最近更新 更多