我目前正在从事一个项目,该项目需要我从其端点输出 XML 以及 JSON。我有以下模型:
[DataContract(Namespace="http://www.yale.edu/tp/cas")]
[XmlType("serviceResponse")]
[XmlRoot(Namespace="http://www.yale.edu/tp/cas")]
public class ServiceResponse
{
[XmlElement("authenticationSuccess")]
public AuthenticationSuccess Success { get; set; }
[XmlElement("authenticationFailure")]
public AuthenticationFailure Failure { get; set; }
}
当success不为null时输出如下:
<serviceResponse>
<authenticationSuccess />
</serviceResponse>
现在,我可以清楚地看到,我没有为命名空间分配前缀,我告诉元素要成为其中的一部分。我的问题是我找不到使用媒体格式化程序在 MVC4 中添加命名空间前缀的地方。我的 global.asax 中有以下内容:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
GlobalConfiguration.Configuration.Formatters.XmlFormatter.RemoveSerializer(typeof(Models.ServiceResponse));
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SetSerializer(typeof(Models.ServiceResponse), new Infrastructure.NamespaceXmlSerializer(typeof(Models.ServiceResponse)));
我基于 XmlSerializer 制作了一个自定义序列化程序,试图拦截写入请求并在那里添加命名空间列表。这种方法的问题是,现在我在每个可覆盖的方法中都有断点,并且在序列化时没有一个断点被触发,这让我相信我的序列化程序没有被使用。
是否有一些内置方法可以完成我想做的事情,或者我是否坚持重新实现 XmlMediaTypeFormatter 以在序列化对象时传入命名空间?