我是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 标记。
我的问题是:
如何配置序列化程序以发送已关闭的标记而不是跳过属性
是否有办法在应用程序级别而不是在类级别配置
更新
我知道您可以使用JsonSerializerSetting配置JsonFormatter,您是否可以使用XMLSerializer以某种方式执行此操作?
我不想在类上添加属性/装饰器。
答案 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响应的期望。