从返回的JSON中排除DataContract Name
本文关键字:排除 DataContract Name JSON 返回 | 更新日期: 2023-09-27 18:18:23
我的WCF服务中有以下数据合约
namespace MyNamespace
{
[DataContract(Namespace = Constants.ContractNamespace)]
public class MyResponse
{
[DataMember]
public string ResponseCode { get; set; }
[DataMember]
public List<MyObject> MyObjects { get; set; }
}
}
当我使用它作为operationcontract的返回类型时,就像这样
[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>
和一个netttcprelaybinding
<netTcpRelayBinding>
<binding name="NetTcpRelayBinding_IMyService"/>
</netTcpRelayBinding>
你可以在配置文件中使用Body Style属性来设置是否包装响应。例如
<endpointBehaviors>
<behavior name="WebWithDefaults">
<webHttp defaultOutgoingResponseFormat="Json"
defaultBodyStyle="Bare" />
</behavior>
</endpointBehaviors>
以上代码采用webHttp协议。你可以把它改成你自己的
原来问题出在我的数据合同上。
上面我放错了,实际上是
[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
{
}