当前位置:  开发笔记 > 编程语言 > 正文

.NET 3.5 SP1中的XmlSerializer更改

如何解决《.NET3.5SP1中的XmlSerializer更改》经验,为你挑选了0个好方法。

我看过很多关于.NET 3.5 SP1变化的帖子,但发现了一个我昨天还没有看到文档的帖子.我的代码在我的机器上工作得很好,从VS,msbuild命令行,一切,但它在构建服务器上运行失败(运行.NET 3.5 RTM).

[XmlRoot("foo")]
public class Foo
{
    static void Main()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Foo));

        string xml = @"";
        using (StringReader sr = new StringReader(xml))
        {
            Foo foo = serializer.Deserialize(sr) as Foo;
        }
    }

    [XmlAttribute("name")]
    public string Name { get; set; }

    public Foo Bar { get; private set; }
}

在SP1中,上面的代码运行得很好.在RTM中,您会收到InvalidOperationException:

无法生成临时类(result = 1).错误CS0200:属性或索引器'ConsoleApplication2.Foo.Bar'无法分配 - 它是只读的

当然,使其在RTM下运行所需的只是将[XmlIgnore]添加到Bar属性.

我的google fu显然无法找到这些变化的文档.是否有任何列出此更改的更改列表(以及类似的引擎盖下的更改,可能会跳起来并大喊"问题")?这是一个错误还是一个功能?

编辑:在SP1中,如果我添加了一个元素,或者为Bar属性设置了[XmlElement],它将不会被反序列化.它在尝试反序列化时不会在SP1之前失败 - 它在构造XmlSerializer时抛出异常.

这让我更倾向于它是一个bug,特别是如果我为Foo.Bar设置[XmlElement]属性.如果它无法做我要求它做的事情,它应该抛出异常而不是默默地忽略Foo.Bar.XML序列化属性的其他无效组合/设置会导致异常.

编辑:谢谢TonyB,我不知道设置临时文件的位置.对于那些在将来遇到类似问题的人,您需要一个额外的配置标志:


  
    
  


  

即使在Bar属性上设置[XmlElement]属性,也没有在生成的序列化程序集中提及它 - 这相当坚定地将其置于一个静默吞噬错误(也就是一个bug)的领域.无论是设计师还是设计者已经决定[XmlIgnore]不再需要无法设置的属性 - 并且您希望在发行说明,更改列表或XmlIgnoreAttribute文档中看到它.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有