Web API 列表序列化
本文关键字:序列化 列表 API Web | 更新日期: 2023-09-27 17:56:41
我想将列表序列化为xml(从web-api方法)。
public class Result
{
public List<string> Users { get; set; }
}
所以我得到例如:
<result>
<user>Paul</user>
<user>David</user>
<user>Joan</user>
</result>
到目前为止,我得到:
<result>
<users>
<user>Paul</user>
<user>David</user>
<user>Joan</user>
</users>
</result>
如何告诉序列化不要将用户列表包装在"users"标签中?
谢谢。
您可以从
XmlObjectSerializer
派生并实现自己的XML序列化程序(请参阅此处的FMI),或者操作您的类型,使其与默认格式化程序一起使用。这不是一个很好的解决方案,但可能适用于一个简单的示例,如下所示:
public class Result : List<User>
{
//Any user added to Result will be nested directly within Result in the XML
}
延伸阅读:
- MSDN: XmlObjectSerializer Class:"扩展 XmlObjectSerializer 以创建自己的序列化程序,以序列化和反序列化对象。"
- 有关 WCF 的见解:自定义 XmlObjectSerializer:包含源代码的真实示例。
您需要在Application_Start方法中将默认的 DataContractSerializer 替换为 XmlSerializer。
对于整个项目:
var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;
对于特定类型:
var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.SetSerializer<Result>(new XmlSerializer(typeof(Result)));
在此之后,您可以使用属性来格式化 xml 输出:
public class Result
{
[XmlElement("user")]
public List<string> Users { get; set; }
}