在 ASP.NET Web API 中进行 xml 序列化时,如何防止 '&' 在 '&' 中进行转换?
How do I prevent '&' to convert in '&' 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>
但目前我收到如下回复,其中“&”更改为“&
”:
<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&end=2015-06-04&id=174511&adults=2&childAges=0&room=1"/>
</Rate>
</RateList>
如何避免我的回复发生这种变化?
提前致谢。
这是正确的行为。如果它没有被转义,XML 将是错误的(也就是说,解析器必须报告错误并且无法解析它)。如果要生成XML,则必须转义&
个字符。
属性的值包含一个&
。在 XML 中 表示 它的词法是将其写成 &
。如果您解析 XML 并询问属性值作为字符串,您将看到它已被解析器正确解码。
您可以将其视为使用反斜杠转义 Java 或 C++ 字符串中的特殊字符的方式。字符串值不包含任何反斜杠,但你必须使用它们来表示词汇上的一些特殊字符。
您有两个相互矛盾的要求:
(a) 输出应该是 XML
(b) 输出应包含未转义的“&”
XML 不能包含未转义的符号。
我正在使用 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>
但目前我收到如下回复,其中“&”更改为“&
”:
<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&end=2015-06-04&id=174511&adults=2&childAges=0&room=1"/>
</Rate>
</RateList>
如何避免我的回复发生这种变化?
提前致谢。
这是正确的行为。如果它没有被转义,XML 将是错误的(也就是说,解析器必须报告错误并且无法解析它)。如果要生成XML,则必须转义&
个字符。
属性的值包含一个&
。在 XML 中 表示 它的词法是将其写成 &
。如果您解析 XML 并询问属性值作为字符串,您将看到它已被解析器正确解码。
您可以将其视为使用反斜杠转义 Java 或 C++ 字符串中的特殊字符的方式。字符串值不包含任何反斜杠,但你必须使用它们来表示词汇上的一些特殊字符。
您有两个相互矛盾的要求:
(a) 输出应该是 XML
(b) 输出应包含未转义的“&”
XML 不能包含未转义的符号。