Inp*_*mex 5 namespaces response xml-namespaces servicestack
问题是:当使用IHasResponseStatus
和public ResponseStatus ResponseStatus { get; set; }
属性时,如何使用一个命名空间进行响应,并删除前缀 d2p1 on ResponseStatus
。
我http://schemas.tagway.com.ua/types
为所有 Web 服务模型使用一个命名空间;除了节点 ResponseStatus 之外,响应看起来很棒,因为 ServiceStack: 它会自动xmlns:d2p1="http://schemas.servicestack.net/types"
为 ResponseStatus添加自己的命名空间。
服务模式:
namespace NTPCore.ServiceModel.Operations.Balance
{
public class Balance
{
public Auth auth { get; set; }
}
public class BalanceResponse : IHasResponseStatus
{
public ResponseStatus ResponseStatus { get; set; }
public int balance { get; set; }
public int limit { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
NTPCore.ServiceModel 项目中的 AssemblyInfo.cs:
[assembly: ContractNamespace("http://schemas.tagway.com.ua/types", ClrNamespace = "NTPCore.ServiceModel.Operations.Balance")]
[assembly: ContractNamespace("http://schemas.tagway.com.ua/types", ClrNamespace = "ServiceStack.ServiceInterface.ServiceModel")] //may be this not need...experimenting, nothing happance for me
Run Code Online (Sandbox Code Playgroud)
示例响应:
<BalanceResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.tagway.com.ua/types">
<ResponseStatus xmlns:d2p1="http://schemas.servicestack.net/types">
<d2p1:ErrorCode>String</d2p1:ErrorCode>
<d2p1:Errors>
<d2p1:ResponseError>
<d2p1:ErrorCode>String</d2p1:ErrorCode>
<d2p1:FieldName>String</d2p1:FieldName>
<d2p1:Message>String</d2p1:Message>
</d2p1:ResponseError>
</d2p1:Errors>
<d2p1:Message>String</d2p1:Message>
<d2p1:StackTrace>String</d2p1:StackTrace>
</ResponseStatus>
<balance>0</balance>
<limit>0</limit>
</BalanceResponse>
Run Code Online (Sandbox Code Playgroud)
ServiceStack利用.NET 的内置 XML DataContractSerializer 进行 XML 序列化。不幸的是,为了[assembly: ContractNamespace ..]
产生效果,您需要使用[DataContract]
和[DataMember]
属性来装饰您的 DTO。例如:
[DataContract]
public class Balance
{
[DataMember]
public Auth auth { get; set; }
}
[DataContract]
public class BalanceResponse : IHasResponseStatus
{
[DataMember]
public ResponseStatus ResponseStatus { get; set; }
[DataMember]
public int balance { get; set; }
[DataMember]
public int limit { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它很丑陋,但这就是为漂亮的 XML 付出的代价,另一个选择是使用您自己的自定义序列化/反序列化例程覆盖内置的 XML Content-Type - 但这需要更多的工作。
归档时间: |
|
查看次数: |
2609 次 |
最近记录: |