序列化系统。对象

时间:2011-03-30 22:25:00

标签: c# .net web-services

我正在尝试创建一个Web服务来返回泛型。返回类如下所示:

[Serializable]
public class RenderReturn
{
    public RenderReturnStatus StatusReturn { get; set; }
    public string MessageReturn { get; set; }
    public string MessageTitle { get; set; }
    public object **ObjectReturn** { get; set; }
}

ObjectReturn可以是对象或应用程序对象列表,如汽车,客户等。

但是webservice返回以下错误:

System.InvalidOperationException: There was an error generating the XML document. --->
System.InvalidOperationException: The type Environment was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
   at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)

这是可能的,或者方法应该总是返回特定的类型?

3 个答案:

答案 0 :(得分:1)

明确指出您的类型。否则,可以放入不可序列化的东西。

答案 1 :(得分:0)

object的类型对.NET来说过于通用,无法知道它正在处理什么类型的对象以及如何反序列化。因此,它要求您通过使用XmlInclude属性告诉.NET所期望的类型来给它一些提示。在WCF中,您也可以这样做:使用KnownType属性来装饰属性。

类型object不适合需要跨越流程边界的DTO对象。

在WCF或Web服务中,尽量不要以面向对象的方式思考,而是在WSDL中思考。就WSDL而言,您有一个契约,它明确定义了客户端和服务器之间传递的消息类型。

答案 2 :(得分:0)

尝试以下几点:

public class RenderReturn<T>
{
  public T ObjectReturn {get;set;}
}

这样,在运行时,你将拥有一个具体的类型,而不仅仅是System.Object。