Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WCF中序列化时不包括IComparable_C#_Wcf_Serialization_Icomparable - Fatal编程技术网

C# 在WCF中序列化时不包括IComparable

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

我在服务器端填写了一个列表。这是一个“用户”列表,它实现了IComparable。 现在,当WCF序列化数据时,我想它不包括CompareTo方法。这是我的对象类:

[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); });
您可以直接在客户机中使用它