返回信息流下面类继承于DataTable,为什么实用该类做为客服端参数时,在服务端老师反序列化不成功。
[Serializable()]
public class ContactDataTable : DataTable
{
public ContactDataTable(string name)
: base(name)
{
DataColumn dc1 = new DataColumn("FirstName", typeof(string));
DataColumn dc2 = new DataColumn("LastName", typeof(string));
Columns.Add(dc1);
Columns.Add(dc2);
}
public void AddContactRow(ContactsRow row)
{
object[] ob = new object[2];
ob[0] = row.FirstName;
ob[1] = row.LastName;
Rows.Add(ob);
}
public ContactsRow AddContactsRow(string FirstName, string LastName)
{
object[] ob = new object[2];
ob[0] = FirstName;
ob[1] = LastName;
Rows.Add(ob);
return (ContactsRow)Rows[Rows.Count - 1];
}
protected override Type GetRowType()
{
return typeof(ContactsRow);
}
protected override DataRow NewRowFromBuilder(DataRowBuilder builder)
{
return (DataRow)new ContactsRow(builder);
}
}
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2456同步于 2010/10/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
有学习WCF的么?求教,
ppoo
2010/10/28镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
把表按Write To Xml,然后以string传递,然后在使用的地方恢复成DataTable
作为一个服务,不要暴露像DataTable这种跟.NET太过于紧密的类型
DataSet对象是可序列化的,但DataTable对象是不可序列化的
在C#中常见的序列化的方法主要也有三个:BinaryFormatter、SoapFormatter、XML序列化
因此, 给类添加属性[Serializable]是为了给上述方法指示该类可序列化。否则会抛出SerializationException异常.
由于DataTable不支持序列化,所以就会抛出异常,建议转换为可序列化类型
【 在 ppoo 的大作中提到: 】
: 下面类继承于DataTable,为什么实用该类做为客服端参数时,在服务端老师反序列化不成功。
: [Serializable()]
: public class ContactDataTable : DataTable
: ...................
序列化不成功,如果想序列化成XML或Soap格式的,直接将你DataTable的数据读出来,重写成
XML或Soap格式,这个不难,如果想序列化成2进制,本人不知。