web service服务的代理会根据使用的实体类来生成一份经过xml序列化的实体类,这个序列化前后的2个实体类是不同的。
所以客户端是不能直接给你定义的实体类进行赋值。
如果要在客户端也能够直接调用实体类来操作,需要自行实现序列化方法。
具体内容请参照
/////////////////////////////////////Webservice:////////////////////////////////////
using System;
.................
using HumanResource;
namespace ServiceTest
{
public class MyService : System.Web.Services.WebService
{
public MyService()
{
.........
}
...............
//方法
[WebMethod]
public string GetEmployee( )
{
Employee m_emp = new Employee();
return Serializer.Serialize(m_emp);
}
}
}
在访问webservice的一端,先将返回的序列化之后的对象反序列化为实体类后再来使用。
using HumanResource;
namespace ServiceClientTest
{
public class MyServiceClient
{
public MyServiceClient()
{
.........
}
...............
//方法
public Employee GetEmployee( )
{
string strm_emp = service.GetEmployee( );
return Serializer.DeSerialize(m_emp) as Employee;
}
}
}
客户端程序(可能也是个web程序)通过调用MyServiceClient的方法来访问WebService.
二进制序列化反序列化的方法:
public static string Serialize(object obj)
{
string serializedObject = null;
if (obj != null)
{
IFormatter formatter = new BinaryFormatter();
using (Stream stream = new MemoryStream())
{
formatter.Serialize(stream, obj);
long count = stream.Length;
byte[] buff = new byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(buff, 0, Convert.ToInt32(count));
stream.Close();
serializedObject = Convert.ToBase64String(buff);
}
}
return serializedObject;
}
public static object DeSerialize(string serializedObject)
{
object @object = null;
if (serializedObject!="")
{
IFormatter fter = new BinaryFormatter();
byte[] buff = Convert.FromBase64String(serializedObject);
using (Stream stream = new MemoryStream(buff))
{
@object = fter.Deserialize(stream);
stream.Close();
}
}
return @object;
}
搬了一下刚才在另外一个问题中的回复,希望对你的问题有帮助. :)