- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我看过很多关于 .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/
在我的 Visual Studio 2010 项目中,我使用以下 Post-Build 事件命令行使用 sgen 创建 XmlSerializers.dll。 构建后事件: "$(ProgramFil
我用 XMLSerializer 类做了一些事情。像大多数初学者一样,我在应用程序启动时遇到性能问题。我阅读了很多博客、文章,最后使用了 SGEN 工具。现在性能看起来还不错,但我还有一些不清楚的地方
过去 2 天我一直被这个问题困扰,但仍然没有解决,我正在寻求帮助。 我的 Listbox根据在 Combobox 中选择的项目,获取添加到其中的生成项目.当我点击按钮时 Create出现一个带有 We
我正在尝试解决如何生成一些 Xml,它使用 XmlSerializer 的一组类中的前缀不仅仅是微不足道的使用。我还希望能够读取相同的 Xml(这相当简单,但随着我使用更复杂的属性似乎消失了。 具体用
XmlSerializer 很难(= 不)反序列化包含表情符号字符的内容,例如 ��。我读过这样的字符在 XML 标准中实际上是非法的;但是,如果我想忠实地表示包含表情符号的聊天对话,则需要它们。如何
我将 XmlSerializer 用于 WCF 服务(就我的服务而言,这是有原因的)。但是最近我遇到了这个问题:我找不到一种简单的方法来使引用类型属性成为必需的,即使其在 XSD 中的定义如下所示:
假设您有两个类,一个继承另一个类,并且子类需要使用 XmlSerializer 进行序列化/反序列化。但是,父级包含一个不可序列化的成员,例如字典。 public class Parent {
我正在尝试使用 XmlSerializer 解析具有如下所示元素的 XML。 amount 元素下有相当多的货币类型,我想将它们反序列化为一个对象集合,这些对象具有保存货币类型的字符串属性和保存金额的
我正在用 Javascript 生成 KML 文档,并尝试使用 XMLSerializer生成 XML 文件,但它生成所有小写标签,即使我在 DOM 中以大写形式创建标签。 是 DOM 破坏了大小写还
我有一小段代码可以将 XML 解析为 JSON。它工作得很好,直到我引入 XMLSerializer 来获取 JSON。 public static String convertXMLFileToSt
假设您有两个类,一个继承另一个,子类需要使用 XmlSerializer 进行序列化/反序列化。但是,父级包含一个不可序列化的成员,比如字典。 public class Parent { pu
我正在尝试使用 XmlSerializer 解析具有如下所示元素的 XML。 amount 元素下有相当多的货币类型,我想将它们反序列化为一个对象集合,这些对象具有保存货币类型的字符串属性和保存金额的
我正在尝试将继承属性的所有成员序列化 (XmlSerializer) 作为特性。 两个类: public class Tree { public Point Location { get; s
我在使用 XmlSerializer 时遇到了修剪字符串的问题, 当使用 XmlReader 时。 IgnoreWhitespace 选项显示无效,元素字符串仍包含\n 和空格。 有什么方法可以“即时
我有以下扩展方法来序列化我的类.... public static string SerializeToXml(this object obj) {
我正在尝试反序列化以下 XML(摘录): Waking The Demon Bullet For My Valentine false B
我在使用 .NET 中的 XmlSerializer 时遇到了一些问题。 这里我有一个我刚刚建立的小例子。 (也可用 @ gist https://gist.github.com/2d84be9041
我从 DTD(通过 XSD 和 xsd.exe)为我的 C# 项目创建了类,因此我可以轻松地将它们反序列化为代码中的模型类。 我大致是这样的: XmlReaderSettings readerSett
我使用 XSD.EXE 将 XSD 转换为对象。这很好用,我可以很好地使用 XMLSerializer 反序列化,除了作为数组生成的子元素不会填充。 private SubElements[]
对不起我的英语。我有 XmlSerializer 的奇怪之处。这是我的代码 [Serializable] public class Radio { public bool hasSubWoof
我是一名优秀的程序员,十分优秀!