从返回JSON中排除DataContract Name

时间:2015-10-20 07:05:09

标签: c# json wcf

我的WCF服务中有以下DataContract

namespace MyNamespace
{
    [DataContract(Namespace = Constants.ContractNamespace)]
    public class MyResponse
    {
        [DataMember]
        public string ResponseCode { get; set; }

        [DataMember]
        public List<MyObject> MyObjects  { get; set; }

    }
}

然后我将其用作我的一个OperationContracts中的返回类型

[OperationContract]
MyResponse ValidateById(string id);

然后我得到以下回复

{"MyResponse":{"MyObjects":null,"ResponseCode":"ERR001"}}

有没有办法让它只返回属性,所以它就像

{"MyObjects":null,"ResponseCode":"ERR001"}

更新 我也在使用transportClientEndpointBehavior

<endpointBehaviors>
    <behavior name="EndpointBehavior_IMyService">
      <transportClientEndpointBehavior>
        <tokenProvider>
          <sharedAccessSignature keyName="RootManageSharedAccessKey" key="keyhere" />
        </tokenProvider>
      </transportClientEndpointBehavior>
    </behavior>
  </endpointBehaviors>

和netTcpRelayBinding

<netTcpRelayBinding>
    <binding name="NetTcpRelayBinding_IMyService"/>
  </netTcpRelayBinding>

2 个答案:

答案 0 :(得分:1)

您可以使用“正文样式”属性从配置文件中设置包装响应。 e.g。

<endpointBehaviors>
    <behavior name="WebWithDefaults">
        <webHttp defaultOutgoingResponseFormat="Json"
                 defaultBodyStyle="Bare" />
    </behavior>
</endpointBehaviors>

以上代码假设webHttp协议。您可以将其更改为您的

答案 1 :(得分:0)

原来问题在于我的数据合同。

我在上面显示错误的实际上是

   [DataContract(Name = "MyResponse", Namespace = Common.Constants.ContractNamespace)]
public class MyValidateModel
{
    [DataMember]
    public MyResponse MyResponse { get; set; }
}

但它必须是

   [DataContract(Name = "MyResponse", Namespace = Common.Constants.ContractNamespace)]
public class MyValidateModel : Common.MyResponse
{
}