在 ASP.NET Web API 中进行 xml 序列化时,如何防止 '&' 在 '&amp' 中进行转换?

How do I prevent '&' to convert in '&amp' while xml serialization in ASP.NET Web API?

我正在使用 ASP.NET Web API、

创建预订服务

哪个响应模型是这样的:

[XmlRoot("RateList")]
public class RateList
{
    [XmlElement("Rate")]
    public List<Rate> Rate { get; set; }

}
public class Rate
{
    [XmlAttribute("Code")]
    public string Code { get; set; }
    [XmlAttribute("ErrorMessage")]
    public string ErrorMessage { get; set; }
     [XmlElement("RoomRate")]
    public List<RoomRate> RoomRate { get; set; }
}
public class RoomRate
{
    [XmlAttribute("URL")]
    public string URL { get; set; }
}

响应必须是XML格式,所以我已经连载如下,

return Request.CreateResponse<RateList>(HttpStatusCode.OK, objRateList, Configuration.Formatters.XmlFormatter);

我的Global.asax文件

WebApiConfig.Register(GlobalConfiguration.Configuration);
        var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
        xml.UseXmlSerializer = true;

实际的反应一定是这样的:

<RateList 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Rate Code="174511">
        <RoomRate URL="https://somedomain.com/planning/booking?start=2015-06-02&end=2015-06-04&id=174511&adults=2&childAges=0&room=1"/>
</Rate>
</RateList>

但目前我收到如下回复,其中“&”更改为“&amp;”:

<RateList 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Rate Code="174511">
        <RoomRate URL="https://somedoamin.com/planning/booking?start=2015-06-02&amp;end=2015-06-04&amp;id=174511&amp;adults=2&amp;childAges=0&amp;room=1"/>
</Rate>
</RateList>

如何避免我的回复发生这种变化?

提前致谢。

这是正确的行为。如果它没有被转义,XML 将是错误的(也就是说,解析器必须报告错误并且无法解析它)。如果要生成XML,则必须转义&个字符。

属性的包含一个&。在 XML 中 表示 它的词法是将其写成 &amp;。如果您解析 XML 并询问属性值作为字符串,您将看到它已被解析器正确解码。

您可以将其视为使用反斜杠转义 Java 或 C++ 字符串中的特殊字符的方式。字符串值不包含任何反斜杠,但你必须使用它们来表示词汇上的一些特殊字符。

您有两个相互矛盾的要求:

(a) 输出应该是 XML

(b) 输出应包含未转义的“&”

XML 不能包含未转义的符号。