【问题标题】:Excluding DataContract Name from return JSON从返回 JSON 中排除 DataContract 名称
【发布时间】:2015-10-20 07:05:09
【问题描述】:

我的 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>

【问题讨论】:

  • 如果您使用 netTCP 绑定,为什么不使用 SOAP 而不是 JSON?

标签: c# json wcf


【解决方案1】:

您可以使用 Body Style 属性从您的配置文件中设置包装响应或不包装响应。 例如

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

以上代码假定使用 webHttp 协议。你可以改成你自己的

【讨论】:

  • 感谢 Patel,使用 transportClientEndpointBehavior 时它是如何工作的?我会更新问题
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2023-03-12
    相关资源
    最近更新 更多