用XmlSerializer序列化陷阱

实际上有点标题党了哈,但实际上这个bug从.net 2.0一直到现在都是存在的,而且m$也从来没有真正解决过,先看段测试代码

 

namespace TestMDA
{
    class Program
    {
        static void Main(string[] args)
        {
            People p = new People()
            {
                Age = 1,
                Name = "Michael"
            };

            AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
                {
                    Console.WriteLine(e.Name);
                    return null;
                };

            using (FileStream fs = new FileStream("test.txt", FileMode.Create))
            {
                XmlSerializer xs = new XmlSerializer(typeof(People)); //throw MDA binding fail here
                xs.Serialize(fs, p);
            }

            Console.ReadLine();
        }
    }

    public class People
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
}

 

上面这段代码无论通过VS05抑或VS08编译之后,运行都会输出

 

TestMDA.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
TestMDA.XmlSerializers

 

但是实际上序列化依然可以照常进行……

 

更诡异的事实是,如果修改相对应的namespace,例如 namespace ABC {…},就会输出

 

ABC.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
ABC.XmlSerializers

 

----------------------- 分割线------------------------

 

为什么提到这个话题呢?我们现在进行着的一个项目中某些代码使用了XML序列化方式,随着程序的运行就会看到类似上面这种日志……苦思不得结果,找遍了引用程序集也没看到对应的dll或exe,想想既然无大碍就暂时没去深究,不过这几天刚好项目要做一个部署分发,在测试时刚好也发现类似问题,遂google之,发现2007年帖子一枚

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=304095&wa=wsignin1.0

 

m$的说法是这个是by design的,不过直到现在.net 3.5也有这毛病,我也就不奢望啥了…

 

ps.当时应该是beta版本的VS,遇到这种情况会抛出异常,还好现在不会抛异常,但是也很郁闷 :)

你可能感兴趣的:(用XmlSerializer序列化陷阱)