webmethod 方法返回值类型是自定义类,要怎么获取

czt0718 2005-12-15 11:24:53
[WebMethod(Description = "用户登陆验证")]
[SoapRpcMethod]
[SoapInclude(typeof(User))]
public UserBase Login(string username)
{
return curUser;
}

我声明了上面的几段代码,好像不行
错误如下

System.InvalidOperationException: 生成 XML 文档时出错。 ---> System.InvalidOperationException: 不应是类型 Linewell.XWorkflow.User.User。使用 XmlInclude 或 SoapInclude 属性静态指定非已知的类型。
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_UserBase(String n, String ns, UserBase o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write4_UserBase(Object o)
--- 内部异常堆栈跟踪的结尾 ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle)
at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()

...全文
411 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
losingrose 2005-12-18
  • 打赏
  • 举报
回复
看看能不能object化,本地再用类把他还原

--------------------------------------------------------------
NeT(Nebula Team)
成都理工学生---求兼职
MSN:losingrose@21cn.com
QQ技术群7019839
4329478
renzhm 2005-12-16
  • 打赏
  • 举报
回复
我用过,没问题,可以传递自定义对象,对象属性数据类型必须是基本类型,

最好不要定义get、set方法,直接public属性,尽管不是很严格

badboy168 2005-12-16
  • 打赏
  • 举报
回复
[WebMethod]
public byte[] ReSerializeDataSet()
{


this.sadp.Fill(this.ds);
this.ds.Tables[0].TableName="table1";
this.ds.Tables[1].TableName="table2";
MemoryStream ms=new MemoryStream();
BinaryFormatter fb=new BinaryFormatter();

fb.Serialize(ms,ds);
byte[] e=ms.ToArray();
ms.Close
return e;
}


public void GetDataSet(byte[] e)
{
DataSet ds=new DataSet();

BinaryFormatter bf=new BinaryFormatter();
MemoryStream ms=new MemoryStream(e);

object o=bf.Deserialize(ms);

ds=(DataSetSurrogate)o;

ms.Close();

return ds;

}
badboy168 2005-12-16
  • 打赏
  • 举报
回复
首先声明序列化类的nameSpace
using System.Runtime.Serialization.Formatters.Binary;
using Systme.IO;
//设ABC为自定义类
class c1 //c1类是进行序列化
{
public byte[] ReturnObject(ABC obj)
{
MemeoryStream ms=new MemoryStream()
BinaryFormatter fb=new BinaryFormatter();
fb.Serialize(ms,fb);

byte[] e=fb.ToArray();

return e;
}
}


class c2 //接收byte[]类型参数,并返序列化,得到相应类型
{
pubilc void GetObject(byte[] e)
{
MemoryStream ms=new MemoryStream(e);
object o=bf.Deserialize(ms);
ABC abc=(ABC)o;
}
}
ChengKing 2005-12-15
  • 打赏
  • 举报
回复
返回类的对象必须能够序列化.

http://blog.csdn.net/chengking/archive/2005/10/31/519799.aspx
czt0718 2005-12-15
  • 打赏
  • 举报
回复
上面那句是[SoapInclude(typeof(UserBase))],我改了,也不行
czt0718 2005-12-15
  • 打赏
  • 举报
回复
3.自定义对象.
可以传递任意基于自定义类或结构创建的对象。 但要注意一点: 它只能传输数据成员(变量和属性).
如果定义了方法,则方法不能进行序列化传输,序列化后只剩下数据成员.

可以传递自定义对象,那我为什么不行啊,要怎么序列化?

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧