Question

J'ai une liste je remplis à côté serveur. Il est une liste de « Utilisateur », qui met en œuvre IComparable. Maintenant, quand WCF est sérialisation les données, je suppose que ce n'est pas compris la méthode CompareTo. Ceci est ma classe de l'objet:

[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);
    }
}

Est-il possible d'obtenir la méthode CompareTo pour atteindre le client? Putting [DataMember] n'est pas la solution que je l'ai essayé (je sais ...).

Merci à l'avance.

Était-ce utile?

La solution

Vous n'avez pas besoin de mettre en œuvre comparables.

Vous pouvez utiliser des délégués pour trier une liste aussi bien, sans IComparable dans la classe. Essayez le code suivant.

users.Sort(delegate(User u1, User u2) { return u1.LastActive.CompareTo(u2.LastActive); });

Vous pouvez utiliser ce directement dans votre client.

Autres conseils

n, CompareTo est une méthode non membre.

Si vous voulez reproduire ce sur le côté client, soit fournir une bibliothèque côté client qui adapte l'objet client, ainsi que des outils IComparable.

@frogbot a une suggestion d'objets, mais qui passe valide est contraire à la vraie nature de la SOA, l'objectif est d'interfaces de conversation et c'est pourquoi ils ont rendu plus difficile à utiliser le NetDataContractSerializer.

Interfaces (code) ne sont pas sérialisé. Vous pouvez envisager de passer à NetDataContractSerializer. Dans ce cas, les informations de type sera inclus dans le flux et vous pouvez obtenir le même objet sur le client (si le contenant assemblage du type est en AppDomain).

Parce que votre client et le serveur parlent la même pile de technologie (à savoir les deux utilisent .Net), demandez à votre code côté client référence les mêmes (objet de données contenant) ce que l'assemblage comme utilisé par le serveur *. Ensuite, vos implémentations d'interface seront intacts, les deux ensembles utiliseront les mêmes définitions d'objets de données, plutôt que le serveur en utilisant la définition régulière et le client en utilisant la définition qui est générée dans le cadre de la procuration.

Partage ou « réutilisation » ces assemblées est un sujet qui a été bien couvert sur le SO.

* cela signifie que vos données objets comme utilisateur sont contenus dans un ensemble séparé, qui est la seule tâche de cette assemblée. Ensuite, à la fois client et serveur (webservice) peuvent référencer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top