【问题标题】:web service serialization problemweb服务序列化问题
【发布时间】:2010-07-21 13:25:01
【问题描述】:

我有一个网络服务。此 Web 服务的一个方法,返回 WSSonuc 类。

 [Serializable]
public class WSSonuc
{

    public int M_Durum { get; set; }
    public object M_SonucNesne { get; set; }
}

这是我的 Web 服务方法:

 [WebMethod]
 [SoapHeader("_ticket", Direction = SoapHeaderDirection.InOut)]
public WSSonuc f_Dummy()
{
  WSSonuc ws = new WSSonuc();
  ws.M_Durum = 1;
  ws.M_SonucNesne = new XDocument();
  return ws;
}

当我调用 f_Dummy 时,网站出现异常;例外是:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---> System.InvalidOperationException:生成 XML 文档时出错。 ---> System.InvalidOperationException:类型 System.Xml.Linq.XDocument 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。

【问题讨论】:

    标签: c# asp.net serialization web-services xml-serialization


    【解决方案1】:

    XDocument 不是 XML 可序列化的。您可以替换为 XElement,因为此类被标记为 IXMLSerializable

    如果您决定这样做,了解这两个对象的差异可能很重要。 This 似乎是一个不错的起点(除了我在上面放置的 MSDN 链接之外)。

    或者,您也可以依靠优秀的 ole' XmlDocument

    【讨论】:

      【解决方案2】:

      当您找到要传递的适当类时,您还需要使用 XmlIncludeAttribute

      声明可以返回哪些对象(在 Web 服务类或方法级别上)
      [XmlInclude(typeof(ANyDerivedType1))]
      [XmlInclude(typeof(ANyDerivedType2))]
      public WSSonuc f_Dummy()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 2019-09-08
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        相关资源
        最近更新 更多