4

パフォーマンス チューニングのため、必要なプロパティのみを返したいと思います。可能性/回避策はありますか? 理解するための疑似/サンプルコード:

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

そしてサービス:

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

2 に答える 2

3

オブジェクト モデルで別のビューを公開したい場合、最も簡単な方法は、よりスリムな DTO でデータを公開することです。つまり、2 番目のクラス (通常は別の名前空間) を作成し、それらの間でデータを変換します。手で (これを行うコード、おそらく静的変換演算子を記述します)、またはPropertyCopy( so のように) のようなユーティリティを使用します。

また、個別の DTO を使用すると、クライアントのパフォーマンスに影響を与えずにコア オブジェクト モデルを拡張でき、バージョン管理がはるかに簡単になります。

于 2009-09-30T11:06:49.817 に答える
2

あなたの質問を正しく理解できれば、[DataMember(EmitDefaultValue=false)] が役立つかもしれません。

于 2009-10-01T04:11:46.230 に答える