Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF:仅返回json上必需的属性_C#_Wcf_Json_Datacontractserializer_Datacontract - Fatal编程技术网

C# WCF:仅返回json上必需的属性

C# WCF:仅返回json上必需的属性,c#,wcf,json,datacontractserializer,datacontract,C#,Wcf,Json,Datacontractserializer,Datacontract,由于性能调整,我只想返回必要的属性。是否有可能/解决办法?要理解的伪代码/示例代码: [DataContract] public interface IMemberOverview { [DataMember] public int Id { get; set; } [DataMember] public string Name { get; set; } } [DataContract] public interface IMemberDetail {

由于性能调整,我只想返回必要的属性。是否有可能/解决办法?要理解的伪代码/示例代码:

[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);
}
[运营合同]
[WebInvoke(
Method=“GET”,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json,
UriTemplate=“ListMembers”)]
[知识类型(类型(成员))]
公开名单成员()
{
返回MemberDAO.Instance().GetAll();
}
[经营合同]
[WebInvoke(
Method=“GET”,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json,
UriTemplate=“Member/{idString}”)]
[知识类型(类型(成员))]
公共列表成员(字符串idString)
{
var id=int.Parse(idString);
返回MemberDAO.Instance().Get(id);
}

如果您想在对象模型上公开不同的视图,那么最简单的方法就是在更细的DTO上公开数据,即编写第二个类(通常在不同的命名空间中)并在它们之间转换数据。可以手工编写(编写一些代码,可能是一个静态转换操作符,可以实现这一点),也可以使用诸如
PropertyCopy
()之类的实用程序


拥有一个单独的DTO还允许您在不影响客户端性能的情况下扩展核心对象模型,并使版本控制更加简单。

如果我正确理解您的问题,[DataMember(EmitDefaultValue=false)]可能会有所帮助