我正在尝试创建一个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)
这是可能的,或者方法应该总是返回特定的类型?
答案 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。