问题标签 [xmlserializer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1711 浏览

c# - 如何生成具有属性的 xsi:nil 元素?

我有一个 WCF 客户端,它需要生成包含此 XML 片段的请求:

架构由服务器确定,不受我控制。生成的代理代码有一个包含(除其他外)属性nullFlavortypeCode. 代理使用 XmlSerializer。

如何生成这样的片段?xsi:nil仅当相应成员为空时,XmlSerializer 才会发出该属性。如果它为空,它就不能很好地具有将作为属性发出的属性!

顺便说一句,根据 XML Schema Instance 规范,该片段是合法的,该规范说 nil 元素不能包含任何子元素或内部文本,但可以包含属性。

0 投票
2 回答
3363 浏览

.net - 反序列化 XML 时忽略指定的编码

我正在尝试通过套接字读取从外部接口接收的一些 XML。问题是在 XML 标头中指定的编码错误(它说 iso-8859-1,但它是 utf-16BE)。据记载,编码是 utf-16BE,但显然他们忘记设置正确的编码。

要在反序列化时忽略编码,我使用这样的 StringReader:

以上实际上工作正常,但我不喜欢通过调用 ReadLine 跳过标题行的部分。有没有更简单的方法来绕过 XML 标头中指定的编码?

使用 StreamReader 的解决方案

通过使用 StreamReader,我可以覆盖 XML 标头中指定的编码。是否指定 XmlReaderSettings.IgnoreProcessingInstructions 没有任何区别。有趣的是,如果 StreamReader 找到一个 unicode 字节顺序标记,它会忽略指定的编码。

回顾一下:

  • 如果使用 TextReader 初始化 XmlReader,则忽略 XML 标头编码。
  • 如果使用 StringReader,如果存在 unicode 字节顺序标记,则 XmlReader 将失败。
  • 如果使用 StreamReader,则 unicode 字节顺序标记会覆盖 StreamReader 编码。
  • XmlReaderSettings.IgnoreProcessingInstructions = true 在使用 TextReader 时没有区别。

总之,最强大的解决方案似乎是使用 StreamReader,因为它使用字节顺序标记(如果存在)。

0 投票
2 回答
3478 浏览

c# - XmlSerializer - 使用 URI 属性序列化对象时出错

我在序列化具有Uri属性的类时遇到问题。

我希望这个属性被序列化。有什么办法解决这个问题?我应该声明某种转换器,并使用 URI 的字符串表示形式吗?

0 投票
2 回答
53268 浏览

c# - C# 将 XML 反序列化为对象

在 C# 中将某些 xml 反序列化为对象时遇到问题。

我收到的错误是...

我收到的用于生成我的课程的 XSD 如下...

(剪断)

我尝试导入的文件如下:

(剪断)

认为正在发生的事情是,当 .Net 尝试对 xml 进行反序列化时,它会遇到包含“xmlns:ast”的第一行并抱怨它。据我了解,.Net 将尝试将属性映射到目标类中的公共属性(它不会找到一个名为 xmlns 的属性。或者我处理名称空间的方式有问题。

我的反序列化代码如下所示:

我还尝试了将命名空间管理器添加到 XML 文档的各种组合。

我知道有一种方法可以用来告诉 .Net 接受哪些命名空间。

对于这个问题的一些帮助将非常有用。

--- 根据要求更新了类片段(抱歉之前应该包含)这是用 xsd.exe 创建的 ---

0 投票
4 回答
6648 浏览

.net - XmlSerializer 在 64 位系统上启动巨大的性能损失

在具有大量字段的类上调用简单的 XmlSerializer.Deserizlize() 时,我遇到了非常巨大的性能损失。

注意:我在家里编写没有 Visual Studio 的代码,所以它可能有一些错误。

我的可序列化类是扁平的,有数百个字段:

我的应用程序反序列化输入字符串(甚至很小):

在 32 位系统中运行应用程序(或使用 corflags.exe 强制 32 位),代码第一次大约需要ONE SECOND(临时序列化类生成,以及所有......),然后它接近 0。

在 64 位系统中运行应用程序,代码第一次需要ONE MINUTE,然后接近 0。

在 64 位系统中,对于一个大类,在第一次执行 XmlSerializer 期间,什么可能会使系统挂起这么长时间?

现在我不确定我是否必须责怪临时类生成/删除、xml 名称表初始化、CAS、Windows 搜索、防病毒或圣诞老人......

剧透

这是我的测试,如果您不想被我的(可能的)分析错误所吸引,请不要阅读此内容。

  • 从 Visual Studio 调试器运行代码使代码即使在 64 位系统中也能快速运行
  • 添加(完全未记录的)system.diagnostic 开关“XmlSerialization.Compile”,防止系统删除序列化临时类,使代码即使在 64 位系统中也能快速运行
  • 采用运行时创建的临时 FooXmlSerializer 类,包括我项目中的 .cs,并使用它而不是 XmlSerializer,即使在 64 位系统中也可以使代码快速运行
  • 使用 sgen.exe 创建相同的 FooXmlSerializer 类,包括我项目中的 .cs,并使用它代替 XmlSerializer,即使在 64 位系统中也可以快速运行代码
  • 使用 sgen.exe 创建相同的 FooXmlSerializer 类,在我的项目中引用 Foo.XmlSerializers.dll 程序集,并使用它而不是 XmlSerializer,即使在 64 位系统中也使代码运行缓慢(这让我很烦恼)
  • 仅当反序列化的输入实际上包含大类的字段时才会发生性能损失(这也让我很烦恼

为了进一步解释最后一点,如果我有课:

仅在传递 Foo 孩子时反序列化很慢。即使我已经执行了反序列化:

编辑我忘了说我用进程监视器分析了执行,我没有看到任何任务从我的应用程序或 csc.exe 或任何与框架相关的东西中花费很长时间。系统只是做其他事情(或者我遗漏了一些东西),比如防病毒、explorer.exe、Windows 搜索索引(已经尝试关闭它们)

0 投票
1 回答
342 浏览

.net - 从 xmlserializer 生成的 xml 中的额外 xmlns

我通过 xsd.exe 工具从模式生成了一个类

xmlns=""现在,当我对课程进行序列化时,我会在根目录下的所有内容上获得额外信息。

架构如下所示:

我在架构中看不到任何内容,表明 tag1 元素及以下元素应该位于根目录之外的另一个命名空间中。

序列化代码只是做:

从 xsd.exe 生成的类只包含根类的命名空间属性。

0 投票
5 回答
5808 浏览

c# - 如何序列化包含字典的类?

我有以下课程:

我想使用 XmlSerializer 对其进行序列化并获得以下输出:

任何帮助,将不胜感激。

0 投票
1 回答
1539 浏览

c# - 使用 System.Xml.Serialization.XmlSerializer 反序列化有效 xml 文件的差异

一个相当复杂的问题,所以提前谢谢。以下两个 xml 文件都针对给定的模式进行验证,但在尝试使用 .Net 的 XmlSerializer 进行反序列化时,只有第一个正确:

但第二个文件没有正确反序列化,在下面(iso_10303_28.uos as uos1).Items被反序列化为空:

我的反序列化器本质上是:

uos 类是:

iso_10303_28如下:

有没有人遇到过这个问题?是否有一个原因?我错过了什么吗?有修复或解决方法吗?

由于模式和其余代码的大小相当大,并且试图将它们简化到最小的失败部分会导致更多问题(请参阅这个问题)我没有在这里粘贴它们。但是,如果需要,可以在http://code.google.com/p/ifc-dotnet/找到此问题的架构、单元测试和来源

0 投票
1 回答
158 浏览

c# - 我应该为公共 API 使用哪种 XML 序列化方法?

我正在编写一个程序,该程序构建一个由从抽象类继承的类组成的树结构Node。我的程序中内置了许多不同类型的节点。但是,我也希望让更高级的用户能够引用我的库并编写他们自己的Node. 然后,当我的应用程序通过Assembly.Load(). 因此,我的应用程序使用的所有潜在Node类型在运行时才会知道。

此外,我希望能够将这些树与 XML 文件进行序列化和反序列化。我对 XMLSerializer、DataContractSerializer 和实现 IXmlSerializable 有一些经验。通常,我使用 DataContractSerializer,因为它通常需要比实现 IXmlSerializable 更少的代码,并且可以序列化 XmlSerializer 不能序列化的私有字段。

然而,在这个项目中,我还必须考虑其他用户将创建从我的类派生的类,并且还必须添加序列化它们所需的任何代码或属性。

考虑到这一点,我是否应该使用一种序列化机制而不是另一种?

0 投票
1 回答
2914 浏览

android - 创建带有标识的 XML 文件

如何创建一个在每个标签之间具有标识或至少有换行符的 XML 文件?

我正在使用类 XMLSerializer(在 Android 中可用)来处理 XML 创建。

然后我使用 xmlFileContents 的内容创建一个文件,使用 BufferedWriter。该文件已写入,但未识别 ​​XML,并且希望如此。

谢谢。