C# 自定义XmlSerializer仅在WebApi中添加名称空间

C# 自定义XmlSerializer仅在WebApi中添加名称空间,c#,xml,asp.net-web-api,xml-serialization,xmlserializer,C#,Xml,Asp.net Web Api,Xml Serialization,Xmlserializer,我们正在尝试从XMLAPI响应中删除所有名称空间。我们正在使用一个自定义的BufferedMediaTypeFormatter,它看起来像: 名称空间HeyWorld.MediaTypeFormatters { 公共类节MediaTypeFormatter:BufferedMediaTypeFormatter { 公共覆盖布尔CanReadType(类型) { 返回类型(SectionResponse)=类型; } 公共重写bool CanWriteType(类型) { 返回类型(Section

我们正在尝试从XMLAPI响应中删除所有名称空间。我们正在使用一个自定义的
BufferedMediaTypeFormatter
,它看起来像:

名称空间HeyWorld.MediaTypeFormatters
{
公共类节MediaTypeFormatter:BufferedMediaTypeFormatter
{
公共覆盖布尔CanReadType(类型)
{
返回类型(SectionResponse)=类型;
}
公共重写bool CanWriteType(类型)
{
返回类型(SectionResponse)=类型;
}
public override void WriteToStream(类型类型、对象值、流writeStream、HttpContent)
{
var xmlWriterSettings=newxmlwritersettings{omitxmldesclaration=true,Encoding=Encoding.UTF8};
使用(XmlWriter=XmlWriter.Create(writeStream,xmlWriterSettings))
{
var namespace=新的XmlSerializerNamespaces();
添加(string.Empty,string.Empty);
var serializer=新的XmlSerializer(类型);
序列化(编写器、值、名称空间);
}
}
公共重写对象ReadFromStream(类型类型、流readStream、HttpContent内容、IFormatterLogger formatterLogger)
{
var serializer=新的XmlSerializer(类型);
返回序列化程序。反序列化(readStream);
}
}
}
正如我们所理解的(从类似的答案中),即
namespaces.Add(string.Empty,string.Empty)
应该从任何序列化的XML中删除所有名称空间。在单元测试中,这正是它所做的:

[测试]
public void应该是donamespaces(){
var sectionResponse=新sectionResponse(“是!”);
var sectionMediaTypeFormatter=新的sectionMediaTypeFormatter();
使用(var memoryStream=new memoryStream())
{
sectionMediaTypeFormatter.WriteToStream(typeof(T),sectionResponse,memoryStream,null);
使用(变量读取器=新的流读取器(memoryStream))
{
memoryStream.Position=0;
Assert.That(reader.ReadToEnd())是.EqualTo(
''
);
}
}
}
但是在部署的应用程序中,它添加了默认名称空间

GET /Section/21

<Section 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    attribute="yes!"></Section>

如果您能帮助您消除这些问题,我们将不胜感激。

请确保添加支持的媒体类型:

public class SectionMediaTypeFormatter : BufferedMediaTypeFormatter
{
    public SectionMediaTypeFormatter()
    {
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
    }

另外,我发现您仍然希望保留默认的xml格式设置程序…因此您希望此自定义格式设置程序仅应用于
SectionResponse
类型,而对于所有其他类型,默认的xml格式设置程序都应适用…是吗?

请确保添加支持的媒体类型:

public class SectionMediaTypeFormatter : BufferedMediaTypeFormatter
{
    public SectionMediaTypeFormatter()
    {
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
    }

我还看到,您仍然希望保留默认的xml格式设置程序…因此您希望此自定义格式设置程序仅适用于
SectionResponse
类型,而对于所有其他类型,默认的xml格式设置程序都应适用…是吗?

是的,我们正在尝试慢慢实现。但是媒体类型非常合适。是的,我们正在尝试将内容更新慢慢地,但是媒体类型是正确的。