XmlSerializer将空“<script>”标记添加到输出</script>

时间:2013-01-23 01:52:19

标签: .net xml-serialization

在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更新都可能导致它?为什么??

2 个答案:

答案 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,那么您可以先进行“刷新”吗?