C# web api列表序列化

C# web api列表序列化,c#,asp.net-web-api,C#,Asp.net Web Api,我想将列表序列化为xml(从web api方法) 公共类结果 { 公共列表用户{get;set;} } 例如,我得到: <result> <user>Paul</user> <user>David</user> <user>Joan</user> </result> 保罗 大卫 琼 到目前为止,我得到: <result> <users> <

我想将列表序列化为xml(从web api方法)

公共类结果
{
公共列表用户{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
}
公共类结果:列表
{
//添加到结果中的任何用户都将直接嵌套在XML中的结果中
}
进一步阅读:

  • : “扩展XmlObjectSerializer以创建自己的序列化程序来序列化和反序列化对象。”
  • :带有源代码的真实示例

您需要在应用程序启动方法中将默认DataContractSerializer替换为XmlSerializer

对于整个项目:

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;
对于特定类型:

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.SetSerializer<Result>(new XmlSerializer(typeof(Result)));
var xml=GlobalConfiguration.Configuration.Formatters.XmlFormatter;
SetSerializer(新的XmlSerializer(typeof(Result));
在此之后,您可以使用属性格式化xml输出:

public class Result
{
  [XmlElement("user")]
  public List<string> Users { get; set; }
}
公共类结果
{
[XmlElement(“用户”)]
公共列表用户{get;set;}
}

您能从web api返回列表吗?谢谢,是的,但事实上,结果对象中包含的不仅仅是用户对象列表。谢谢您的想法和链接。事实上,结果类中的数据比用户对象列表中的数据要多,这似乎使它更复杂一些。是的,我想会有。希望链接对您有所帮助——祝您好运!我还没有尝试过,所以我只是好奇:这难道不是试图将
元素重命名为
,而不是消除层次结构的级别吗?它是在消除层次结构的级别-XmlElement替代了XmlArray的默认行为。
public class Result
{
  [XmlElement("user")]
  public List<string> Users { get; set; }
}