gpt4 book ai didi

namespaces - 响应状态 xmlns d2p1

转载 作者:行者123 更新时间:2023-12-01 04:00:48 26 4
gpt4 key购买 nike

问题是:当使用 IHasResponseStatus 时,如何使用一个命名空间进行响应和 public ResponseStatus ResponseStatus { get; set; }属性,并删除 ResponseStatus 上的前缀 d2p1 .

我使用单个命名空间 http://schemas.tagway.com.ua/types适用于所有网络服务模型;除了节点 ResponseStatus 之外,响应看起来很棒,因为 ServiceStack:它会自动添加自己的命名空间 xmlns:d2p1="http://schemas.servicestack.net/types"对于响应状态。

服务模式:

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; }
}
}

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

示例响应:

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

最佳答案

ServiceStack .NET 的内置 XML DataContractSerializer 用于其 XML 序列化。不幸的是 [assembly: ContractNamespace ..]要产生效果,您需要使用 [DataContract] 来装饰您的 DTO和 [DataMember]属性。例如:

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

这很丑陋,但这是为漂亮的 XML 付出的代价,另一个选择是 override the built-in XML Content-Type使用您自己的自定义序列化/反序列化例程 - 但这需要更多的工作。

关于namespaces - 响应状态 xmlns d2p1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com