我怎么能 return xml 没有 <string> 元素?

How can I return xml without <string> element?

我在我的项目中使用 XML 序列化。它运行良好,但我面临两个问题。

  1. 节点格式
  2. 从响应中删除 <string></string>

我尝试序列化的示例对象是:

[XmlRoot("result")]
public class SwRequestListModel
{
    public SwRequestListModel()
    {
        SwRequest = new List<SwRequestShortInfo>();
    }

    [XmlElement("api_version")]
    public string ApiVersion { get; set; }

    [XmlElement("sw_request")]
    public List<SwRequestShortInfo> SwRequest { get; set; }
}

[XmlRoot(ElementName = "sw_request_short_info")]
public class SwRequestShortInfo
{

    [XmlElement(ElementName = "sw_ref_number")]
    public string SwRefNumber { get; set; }

    [XmlElement(ElementName = "db_no")]
    public string DbNo { get; set; }

    [XmlElement(ElementName = "engine_manufacturing_no")]
    public string EngineManufacturingNo { get; set; }

    [XmlElement(ElementName = "engine_ref_type")]
    public string EngineRefType { get; set; }

    [XmlElement(ElementName = "raised_date")]
    public string RaisedDate { get; set; }

    [XmlElement(ElementName = "raised_by")]
    public string RaisedBy { get; set; }

    [XmlElement(ElementName = "status")]
    public string Status { get; set; }

    [XmlElement(ElementName = "approved_by")]
    public string ApprovedBy { get; set; }

    [XmlElement(ElementName = "system_type")]
    public string SystemType { get; set; }
}

我用来序列化的代码是:

public static string ToXml(SwRequestListModel obj)
{
    XmlSerializer s = new XmlSerializer(obj.GetType());
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("", "");
    XmlWriterSettings settings = new XmlWriterSettings
    {
        Indent = true,
        OmitXmlDeclaration = true,
        Encoding = Encoding.UTF8,
        NewLineOnAttributes = true,
        NamespaceHandling = NamespaceHandling.OmitDuplicates,
        IndentChars = Environment.NewLine
    };
    using (var sww = new StringWriter())
    {            
        using (XmlWriter writer = XmlWriter.Create(sww, settings))
        {                
            s.Serialize(writer, obj, ns);
            return sww.ToString(); 
        }
    }        
}

响应显示如下:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"><result> <api_version>1.0</api_version> <sw_request> <sw_ref_number>588</sw_ref_number> <db_no>99899</db_no> <engine_manufacturing_no>MF99899</engine_manufacturing_no> <engine_ref_type>X40B</engine_ref_type> <raised_date>22/06/2021</raised_date> <raised_by>Srusti.Thakkar@test.com</raised_by> <status>Requested</status> <approved_by /> <system_type>test</system_type> </sw_request> <sw_request> <sw_ref_number>589</sw_ref_number> <db_no>88552</db_no> <engine_manufacturing_no>MF99899</engine_manufacturing_no> <engine_ref_type>X40B</engine_ref_type> <raised_date>22/06/2021</raised_date> <raised_by>Srusti.Thakkar@test.com</raised_by> <status>Requested</status> <approved_by /> <system_type>UNIC</system_type> </sw_request> <sw_request> <sw_ref_number>590</sw_ref_number> <db_no>33899</db_no> <engine_manufacturing_no>MF99899</engine_manufacturing_no> <engine_ref_type>X40B</engine_ref_type> <raised_date>22/06/2021</raised_date> <raised_by>Srusti.Thakkar@test.com</raised_by> <status>Requested</status> <approved_by /> <system_type>UNIC</system_type> </sw_request> </result></string>

实际API方法是:

[HttpGet]
    public string GetRequestList(string date, string status, string systemType)
    {        
        SwRequestListModel result = new SwRequestListModel();
        result.ApiVersion = "1.0";
        
        //Here get data 

        return result.ToXml();
    }

浏览器结果是:

更新:

我猜想 API 方法 GetRequestList 序列化字符串对象。尝试 return 原始字符串。

[HttpGet]
public HttpResponseMessage GetRequestList(string date, string status, string systemType)
    {        
        SwRequestListModel result = new SwRequestListModel();
        result.ApiVersion = "1.0";

        //Here get data           

        var response = Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(result.ToXml());
        return response;
    }