質問

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

[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);
}
役に立ちましたか?

解決

すなわち、(通常は別の名前空間に)第二のクラスを記述し、それらの間でデータを変換する - あなたのオブジェクトモデルに異なるビューを公開したい場合は、

、そして最も簡単な方法は、スリムDTO上のデータを公開するだけです。どちらの手によって、又はPropertyCopyなどのユーティリティ(ようなので)。

別のDTOを持つも、あなたは黙ってクライアントのパフォーマンスに影響を与えることなく、あなたのコア・オブジェクト・モデルを拡張することができます、とはるかに簡単にバージョン管理になります。

他のヒント

私が正しくあなたの質問を理解していれば、[データメンバー(EmitDefaultValue =偽)]に役立つことがあります。

scroll top