配置ASP.NET Web API以发送空值的空值

时间:2012-12-14 16:57:49

标签: web-services asp.net-web-api xmlserializer

我是ASP.NET Web API的新手。

我已将我的应用程序配置为使用XMLSerializer

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer
                                                                    = true;

For Simplicity说我的Controller返回类Account

的实例
public class Account
{
  public int AccountId {get;set;}

  public string AccountName {get;set;} 

  public string AccountNickName {get;set;}
}

AccountNickName (可选)具有值

时作为XML响应时我得到此信息
<Account>
 <AccountId>1</AccountId>
 <AccountName>ABAB</AccountName>
 <AccountNickName>My Account</AccountNickName>
</Account>

AccountNickName (可选)为null时,我将此作为XML响应

<Account>
 <AccountId>1</AccountId>
 <AccountName>ABAB</AccountName>
</Account>

如果值为null,则XML输出会跳过 AccountNickName 标记。

我的问题是:

  1. 如何配置序列化程序以发送已关闭的标记而不是跳过属性

  2. 是否有办法在应用程序级别而不是在类级别配置

  3. 更新

    我知道您可以使用JsonSerializerSetting配置JsonFormatter,您是否可以使用XMLSerializer以某种方式执行此操作?

    我不想在类上添加属性/装饰器。

2 个答案:

答案 0 :(得分:1)

如果你把它放在你的财产上,XmlSerializer会写出属性,即使它是null:[XmlElement(IsNullable = true)]

public class Account
{
    public int AccountId { get; set; }
    public string AccountName { get; set; }

    [XmlElement(IsNullable = true)]
    public string AccountNickName { get; set; }
}

XML:

<Account xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <AccountId>123</AccountId>
    <AccountName>John Doe</AccountName>
    <AccountNickName xsi:nil="true"/>
</Account>

答案 1 :(得分:0)

在这里进行了快速测试,我发现如果你不这样做:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer                                                                   = true;

默认情况下,null值将被序列化为实际元素。

你明确想要配置它还有另一个原因吗?将该值设置为&#34; true&#34;将导致Web API使用&#34; XmlSerializer&#34;而不是&#34; DataContractSerialier&#34;这是默认的类。

如果请求包含适当的&#34;内容类型&#34; Web API将返回给定请求的XML。标题表示对XML响应的期望。