在ASP.NET MVC 3(.NET 4.0)站点上,使用XmlSerializer
提供XML文档并通过Serialize()
序列化(相对简单)对象,我注意到在某些时候在过去的几周里,它已经开始插入一个空的<script/>
元素作为根级对象的第一个子元素。
e.g。用于序列化为...的对象
<Information xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MeetingInfo>
<VenueName>PORT MACQUARIE (NSW)</VenueName>
...
现在序列化为..
<Information xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<script/>
<MeetingInfo>
<VenueName>PORT MACQUARIE (NSW)</VenueName>
...
序列化由自定义ActionResult
执行,因此:
public class XmlResult<T> : ActionResult
{
public T Obj { get; set; }
public XmlResult(T obj)
{
this.Obj = obj;
}
public override void ExecuteResult(ControllerContext context)
{
var xs = new XmlSerializer(this.Obj.GetType());
context.HttpContext.Response.ContentType = "text/xml";
xs.Serialize(context.HttpContext.Response.Output, this.Obj);
}
}
代码库中没有任何名为script
的变量,当然也没有被序列化的任何对象。
我将代码转回到一个月之前的位置(肯定是不>插入<script/>
标签,而且,代码现在正在插入它们。
这可能来自哪里?上个月影响.NET框架的任何Windows更新都可能导致它?为什么??
答案 0 :(得分:3)
回答我自己的问题 - 就像黑客帝国中没有勺子一样,没有<script/>
标签。
在Firefox中查看回复 - 没有<script/>
标记。
在IE中查看回复 - 没有<script/>
标记。
但是在我常用的浏览器Chrome中查看回复,并且有<script/>
标记。
在Chrome中查看来源(而不仅仅是将XML视为内容) - 没有<script/>
代码。
因此Chrome浏览器显示XML内容有些奇怪。与序列化无关。
修改:跟踪它。这是作为Blackberry 10 WebWorks SDK的一部分安装的Ripple模拟器。禁用Chrome扩展程序后,神秘的<script/>
标记就会消失。
答案 1 :(得分:0)
当您的对象中没有任何内容名为script
时,XML序列化程序不会生成script
标记。
但是,您正在写信HttpContext.Current.Response.Output
,其中可能包含script
标记。
如果您的结果输出只是 XML,那么您可以先进行“刷新”吗?