Frage

Aufgrund der Performance-Tuning würde Ich mag nur notwendige Eigenschaften zurückzukehren. Gibt es eine Möglichkeit / Abhilfe? Pseudo / Beispielcode zu verstehen:

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

und der 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);
}
War es hilfreich?

Lösung

Wenn Sie eine andere Sicht auf Ihrem Objektmodell verfügbar machen mögen, dann ist der einfachste Ansatz einfach die Daten auf einem schlankeren DTO auszusetzen - das heißt eine zweite Klasse schreiben (in der Regel in einem anderen Namespace) und die Daten zwischen ihnen übersetzen. Entweder von Hand (einige Codes schreiben, vielleicht einen statischen Konvertierungsoperator, dass dies dem Fall ist), oder mit Programmen wie PropertyCopy ( wie so ).

Mit auch eine separate DTO ermöglicht es Ihnen, Ihr Kernobjektmodell zu erweitern, ohne leise Client-Leistung zu beeinträchtigen, und macht Versionierung viel einfacher.

Andere Tipps

Wenn ich verstehe Ihre Frage richtig, [Datamember (EmitDefaultValue = false)] kann helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top