C# 在WCF中序列化时不包括IComparable
我在服务器端填写了一个列表。这是一个“用户”列表,它实现了IComparable。 现在,当WCF序列化数据时,我想它不包括CompareTo方法。这是我的对象类:C# 在WCF中序列化时不包括IComparable,c#,wcf,serialization,icomparable,C#,Wcf,Serialization,Icomparable,我在服务器端填写了一个列表。这是一个“用户”列表,它实现了IComparable。 现在,当WCF序列化数据时,我想它不包括CompareTo方法。这是我的对象类: [DataContract] public class User : IComparable { private string e164, cn, h323; private int id; private DateTime lastActive; [DataMember] public D
[DataContract]
public class User : IComparable
{
private string e164, cn, h323;
private int id;
private DateTime lastActive;
[DataMember]
public DateTime LastActive
{
get { return lastActive; }
set { laatstActief = value; }
}
[DataMember]
public int Id
{
get { return id; }
set { id = value; }
}
[DataMember]
public string H323
{
get { return h323; }
set { h323 = value; }
}
[DataMember]
public string Cn
{
get { return cn; }
set { cn = value; }
}
[DataMember]
public string E164
{
get { return e164; }
set { e164 = value; }
}
public User()
{
}
public User(string e164, string cn, string h323, DateTime lastActive)
{
this.E164 = e164;
this.Cn = cn;
this.H323 = h323;
this.LastActive= lastActive;
}
[DataMember]
public string ToStringExtra
{
get
{
if (h323 != "/" && h323 != "")
return h323 + " (" + e164 + ")";
return e164;
}
set { ;}
}
public override string ToString()
{
if (Cn.Equals("Trunk Line") || Cn.Equals(""))
if (h323.Equals(""))
return E164;
else
return h323;
return Cn;
}
public int CompareTo(object obj)
{
User user = (User)obj;
return user.LastActive.CompareTo(this.LastActive);
}
}
有没有可能让CompareTo方法到达客户端?
放置[DataMember]不是我尝试过的解决方案(我知道…)
提前感谢。不,CompareTo是一种方法,不是成员 如果您想在客户端复制它,可以提供一个客户端库,该库适应客户端对象并实现IComparable
@frogbot确实有一个有效的建议,但传递对象违背了SOA的真正本质,其目的是讨论接口,这就是为什么它们使NetDataContractSerializer的使用变得更加困难。接口(代码)没有序列化。您可以考虑切换到“代码> NETDATACONTROPTIONALTIZER ”。在这种情况下,类型信息将包含在流中,您可以在客户端上获得相同的对象(如果包含该类型的程序集位于
AppDomain
)。因为您的客户端和服务器使用相同的技术堆栈(即,两者都使用.Net),所以您的客户端代码引用相同的对象(数据对象包含)服务器使用的程序集*。然后,接口实现将保持完整,两个程序集将使用相同的数据对象定义,而不是服务器使用常规定义,客户端使用作为代理的一部分生成的定义
共享或“重用”这些程序集是SO中已详细介绍的主题
*这意味着您的数据对象(如用户)包含在一个单独的程序集中,这是该程序集的唯一任务。然后您的客户机和服务器(webservice)都可以引用它。您不需要实现类似的功能 您也可以使用委托对列表进行排序,而不必在类中使用icomparable。试试下面的代码
users.Sort(delegate(User u1, User u2) { return u1.LastActive.CompareTo(u2.LastActive); });
您可以直接在客户机中使用它