Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在web api响应中排除Xml序列化中的属性名_C#_Xml_Asp.net Web Api - Fatal编程技术网

C# 如何在web api响应中排除Xml序列化中的属性名

C# 如何在web api响应中排除Xml序列化中的属性名,c#,xml,asp.net-web-api,C#,Xml,Asp.net Web Api,我有一个名为GetUnitResponse的类,其定义如下 public partial class GetUnitResponse { [System.ServiceModel.MessageBodyMemberAttribute(Name = "GetUnitResponse", Namespace = "", Order = 0)] [System.Xml.Serialization.XmlArrayItemAttribute("Unit", IsNullable=fals

我有一个名为GetUnitResponse的类,其定义如下

public partial class GetUnitResponse { [System.ServiceModel.MessageBodyMemberAttribute(Name = "GetUnitResponse", Namespace = "", Order = 0)] [System.Xml.Serialization.XmlArrayItemAttribute("Unit", IsNullable=false)] public UnitOut[]GetUnitResponse1; public GetUnitResponse() { } public GetUnitResponse(UnitOut[] GetUnitResponse1) { this.GetUnitResponse1 = GetUnitResponse1; } } 公共部分类GetUnitResponse { [System.ServiceModel.MessageBodyMemberAttribute(Name=“GetUnitResponse”,Namespace=”,Order=0)] [System.Xml.Serialization.XmlArrayItemAttribute(“单位”,IsNullable=false)] 公共UnitOut[]GetUnitResponse1; 公共GetUnitResponse() { } 公共GetUnitResponse(UnitOut[]GetUnitResponse1) { this.GetUnitResponse1=GetUnitResponse1; } } 我从response(GetUnitResponse)对象中获得以下xml


客户端希望排除GetUnitResponse1标记,结果xml应如下所示:



如何实现这一点?

默认情况下,ASP.NET Web API使用来序列化XML。不幸的是,此序列化程序不支持将集合序列化为未包装的元素列表。另一方面,允许更灵活的XML和更多的定制

您可以指示ASP.NET Web API使用XmlSerializer而不是默认的XmlSerializer:

现在剩下的就是用
[xmlement]
属性装饰字段:

为了更好地封装,我建议您使用属性而不是字段

<pre>
<GetUnitResponse xmlns:xsi="" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <GetUnitResponse1>
        <Unit day="2016-01-27" ID="572">

        </Unit>
        <Unit day="2016-01-27" ID="573">

        </Unit>
        <Unit day="2016-01-27" ID="574">

        </Unit>
        </GetUnitResponse1>
</GetUnitResponse>
</pre>
<pre>
<GetUnitResponse xmlns:xsi="" xmlns:xsd="http://www.w3.org/2001/XMLSchema">    
        <Unit day="2016-01-27" ID="572">

        </Unit>
        <Unit day="2016-01-27" ID="573">

        </Unit>
        <Unit day="2016-01-27" ID="574">

        </Unit>     
</GetUnitResponse>
</pre>
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
public partial class GetUnitResponse
{
    [XmlElement("Unit")]
    public UnitOut[] GetUnitResponse1;

    ...
}