gpt4 book ai didi

serialization - ServiceStack 序列化 XML 中的列表

转载 作者:行者123 更新时间:2023-12-04 05:38:01 25 4
gpt4 key购买 nike

我有一个预定义的 xml 示例,它定义了请求和响应,这是我无法使用的唯一部分 ServiceStack.Text.XmlSerializer是以下代码段,它基本上是一个字符串列表。

<user>
....
<EmailPreferences>
<EmailProgram>Newsletter</EmailProgram>
<EmailProgram>Coupons</EmailProgram>
</EmailPreferences>

我尝试使用示例 Using Structs to customise JSON ,但正如标题所暗示的那样,这不会影响 xml 序列化。

最佳答案

ServiceStack 在底层使用 .NET 的 XML DataContractSerializer。因此,您可以使用它支持的任何自定义来装饰模型。因此,要获得类似上述内容,您可以执行以下操作:

[CollectionDataContract(Name="EmailPreferences", ItemName="EmailProgram")]
public class EmailPreferences : List<string>
{
public EmailPreferences() { }
public EmailPreferences(IEnumerable<string> collection) : base(collection){}
}

全局 XML 命名空间

尽管您可以为每个 DataContract 单独添加命名空间,但更好的主意是让所有 DTO 共享相同的命名空间,这将防止自动生成和重复的命名空间出现在您的 XML 中。

由于 ResponseStatus DTO 已经在 http://schemas.servicestack.net/types 之下命名空间所以如果你不关心你的命名空间是什么,我会保留它。

将所有 DataContract 放在同一 namespace 下的最简单方法是将这些程序集范围的属性放在您的 AssemblyInfo.cs 中,用于您的 DTO 所在的每个 C# namespace :
[assembly: ContractNamespace("http://schemas.servicestack.net/types",  
ClrNamespace = "ServiceStack.Examples.ServiceModel.Operations")]
[assembly: ContractNamespace("http://schemas.servicestack.net/types",
ClrNamespace = "ServiceStack.Examples.ServiceModel.Types")]

关于serialization - ServiceStack 序列化 XML 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11661243/

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