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"标签中?

谢谢。

Web API 列表序列化

您可以从

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