gpt4 book ai didi

.NET 3.5 SP1 中的 XmlSerializer 更改

转载 作者:数据小太阳 更新时间:2023-10-29 01:57:50 27 4
gpt4 key购买 nike

我看过很多关于 .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 = @"<foo name='ack' />";
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:

Unable to generate a temporary class (result=1). error CS0200: Property or indexer 'ConsoleApplication2.Foo.Bar' cannot be assign to -- it is read only

当然,要使其在 RTM 下运行,只需将 [XmlIgnore] 添加到 Bar 属性即可。

我的 google fu 显然无法找到此类更改的文档。是否有任何地方列出此更改的更改列表(以及类似的可能跳起来并大喊“明白了”的幕后更改)?这是错误还是功能?

编辑:在 SP1 中,如果我添加了一个 <Bar />元素,或为 Bar 属性设置 [XmlElement],它不会被反序列化。它在尝试反序列化时不会在 SP1 之前失败——它会在构造 XmlSerializer 时引发异常。

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

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

<system.diagnostics>
<switches>
<add name="XmlSerialization.Compilation" value="1" />
</switches>
</system.diagnostics>
<system.xml.serialization>
<xmlSerializer tempFilesLocation="c:\\foo"/>
</system.xml.serialization>

即使在 Bar 属性上设置了 [XmlElement] 属性,在生成的序列化程序集中也没有提及它——这相当坚定地将其置于一个默默吞噬的错误(又名错误)的领域。要么是这样,要么是设计者已经决定 [XmlIgnore] 对于无法设置的属性不再是必需的——您会希望在发行说明中看到这一点,change lists ,或 XmlIgnoreAttribute documentation .

最佳答案

在 SP1 中 foo.Bar 属性是否正确反序列化?

在 SP1 之前的版本中,您无法反序列化对象,因为 Bar 属性的 set 方法是私有(private)的,因此 XmlSerializer 无法设置该值。我不确定 SP1 是如何实现的。

您可以尝试将此添加到您的 web.config/app.config

<system.xml.serialization> 
<xmlSerializer tempFilesLocation="c:\\foo"/>
</system.xml.serialization>

这会将 XmlSerializer 生成的类放入 c:\foo,这样您就可以看到它在 SP1 和 RTM 中做了什么

关于.NET 3.5 SP1 中的 XmlSerializer 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com