Question

En raison de l'optimisation des performances, je voudrais restituer les biens que nécessaires. Est-il possible / solution de contournement? Pseudo / code exemple pour comprendre:

[DataContract]
public interface IMemberOverview
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}

[DataContract]
public interface IMemberDetail
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Status { get; set; }

    [DataMember]
    public string Infos { get; set; }
}

public class Member : IMemberOverview, IMemberDetail
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Status { get; set; }

    public string Infos { get; set; }
}

et le service:

[OperationContract]
[WebInvoke(
    Method = "GET",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "ListMembers")]
[KnownType(typeof(Member))]
public List<IMemberOverview> ListMembers()
{
    return MemberDAO.Instance().GetAll();
}

[OperationContract]
[WebInvoke(
    Method = "GET",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "Member/{idString}")]
[KnownType(typeof(Member))]
public List<IMemberDetail> Member(string idString)
{
    var id = int.Parse(idString);
    return MemberDAO.Instance().Get(id);
}
Était-ce utile?

La solution

Si vous souhaitez exposer une vue différente sur votre modèle d'objet, le plus simple approche est simplement d'exposer les données sur un DTO plus mince - à savoir écrire une deuxième classe (généralement dans un autre espace de noms) et de traduire les données entre eux. Soit à la main (écrire un code, peut-être un opérateur de conversion statique, qui fait cela), ou avec des utilitaires comme PropertyCopy ( comme si ).

Avoir un DTO séparé vous permet également d'étendre votre modèle objet de base sans impact sur les performances du client en silence, et rend beaucoup plus simple versioning.

Autres conseils

Si je comprends bien votre question, [DataMember (EmitDefaultValue = false)] peut aider.

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