问题标签 [ixmlserializable]

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 投票
1 回答
3549 浏览

c# - 在具有 XmlTypeAttribute 的生成类上实现 IXmlSerializable

基本上,最初的问题是我需要将布尔值序列化为 0 或 1。我找到的解决方案是实现 IXmlSerializable,我做到了。不幸的是,我试图序列化的类是从模式生成的代码,并且上面有一个 XmlTypeAttribute。当我尝试使用以通常方式(new XmlSerializer(type))创建的 XmlSerializer 对对象进行(反)序列化时,它会引发此异常:

System.InvalidOperationException: Only XmlRoot attribute may be specified for the type ______ Please use XmlSchemaProviderAttribute to specify schema type.

立即想到两个选择:

1)删除生成代码中的属性。每次重新生成代码时都必须进行此更改。

2) 在创建序列化程序时使用 XmlAttributeOverrides 对象来移除属性。这将要求代码库的其余部分“知道”它需要覆盖该属性。此外,抛出的异常绝对不提供关于需要做什么来修复它的任何线索。

两种选择都有点臭。有第三种选择吗?

0 投票
1 回答
723 浏览

.net - 允许对某些类型的字段进行自定义 Xml 序列化/反序列化的问题

我一直在 .net 中使用 Xml 序列化/反序列化,并且想要一种方法,其中序列化/反序列化过程仅适用于 Xml 片段的某些部分。这样我就可以在反序列化过程之后将片段的某些部分保留在 Xml 中。

为此,我认为最好创建一个实现 IXmlSerializable 的新类 (XmlLiteral),然后编写特定代码来处理 IXmlSerializable.ReadXml 和 IXmlSerializable.WriteXml 方法。

在下面的示例中,这适用于序列化,但是在反序列化过程中,它无法针对我的 XmlLiteral 类的多种用途运行。在下面的示例中,sTest1 被正确填充,但 sTest2 和 sTest3 为空。

我猜我下面的几行肯定出错了,但不知道为什么..有什么想法吗?

完整清单:

0 投票
1 回答
301 浏览

xml - WCF 操作中的不同返回 XML

我正在编写一个符合国际 HTTP 标准的服务,并且有一种方法可以返回三种不同的 XML 结果,分别称为 Single、Multiple 和 Error。现在我编写了一个 IXmlSerializable 类,它可以使用这些结果中的每一个并生成它们。但是,WCF 似乎坚持我只能有一个返回 XML 根名称。我必须为我的单个、多个或错误的自定义对象选择一个 XmlRoot。

如何设置 WCF 以便在运行时选择根目录?

这就是我目前所拥有的。

ItemCollection 实现 IXmlSerializable 并且可以选择要写入的可能返回,但是根 XML 节点始终是多个,因为 ItemCollection 类上的 XmlRoot 属性。

0 投票
1 回答
529 浏览

c# - 用 IXmlSerializable 类表示 XML 配置文件

我正在用 C# 编写并尝试通过一个IXmlSerializable类来表示 XML 配置文件。不过,我不确定如何在我的配置文件中表示嵌套元素,例如logLevel

有一个枚举LogLevel,它代表logLevel标签的所有可能值。里面的标签都credentials应该以字符串的形式出现。在我的课堂上,称为DLLConfigFile,我有以下内容:

但是,这是行不通的,因为<logLevel>它不在 XML 文件的根节点内,而是在<logging>. 我该怎么做呢?

至于<credentials>节点,我的猜测是我需要第二个类,比如CredentialsSection,并且具有如下属性:

编辑: 好的,我尝试了 Robert Love 的建议并创建了一个LoggingSection类。但是,我的测试失败了:

我正在测试的配置文件肯定有<logging>. 下面是这些类的样子:

0 投票
1 回答
417 浏览

ado.net - 无法为 DataTable 写入 XML,因为 Windows 搜索为 Authors 属性返回字符串数组

System.AuthorWindows 属性是一个多值字符串。Windows 搜索将此值作为 DataColumn 中的字符串数组返回。(列的数据类型是string[]or String()。)当我在结果数据表上调用该WriteXML方法时,我得到以下InvalidOperationException异常。

有没有办法指定数据表的 xml-serializer 用于特定列或特定数据类型?

基本上,我怎样才能WriteXML使用这个数据表?

System.InvalidOperationException:类型 System.String[] 未实现 IXmlSerializable 接口,因此无法进行序列化。

0 投票
1 回答
8389 浏览

.net - 在复杂对象图上使用 IXmlSerializable 接口

如果使用自定义 XML 序列化 ( ),在包含使用自定义接口IXmlSerialiable的组成复杂对象的属性的复杂对象上,您如何在方法中指定您希望反序列化器对这些子属性使用普通反序列化?IXmlSerializableIXmlSerializable.ReadXml(XmlReader reader)

注意:类似于这个问题

0 投票
1 回答
2472 浏览

c# - C# 中的 IXmlSerializable 字典,没有“键”/“值”节点

我正在尝试在 C# 中序列化字典。我能够找到 所有示例都创建如下 XML:

它会有所不同,有时ArrayOfEntries节点不是必需的,但我仍然看到字典键值对的常规模式存储在它们自己的节点中。我想要的是如下内容:

我以前写过ReadXmlWriteXml这样做过,它适用于单个字典,但是如果我尝试序列化和反序列化List<T>我的可序列化字典实例,反序列化列表最终只包含最后一个可序列化字典。我认为我的读取或写入方法一定是贪婪的,以至于它不知道何时停止。这是我的可序列化字典方法,目前不适用于可序列List化字典的序列化:

并且ReadXml

我注意到其他教程和我正在做的事情之间的一个区别是,许多人使用XmlSerializerand 中的对象进行序列化和反序列化ReadXmlWriteXml而我使用WriteElementStringand 之类的。

我的问题是,我怎样才能序列化一个字典,使它的 XML 就像我上面的第二个 XML 示例一样,但是序列化和反序列化 aList<MySerializableDictionary>也可以工作?即使只是暗示“你为什么要这样做这可能会让它变得有趣”也会有所帮助。

0 投票
1 回答
5532 浏览

c# - 序列化:改变根节点的名字而不改变类名

目标

取一个名为“Item”的类并将其序列化的 XML 输出为:

问题

根节点派生自实现 IXmlSerializable 的类名。

所以我最终得到的 XML 看起来像

问题

是否有一个属性、一个我可以覆盖的属性或任何东西来获得我想要的效果(除了更改类名)?

谢谢!

感谢 Frederik 的解决方案!

由于这个问题在我对@Frederik Gheysels 答案的评论中得到了回答,所以我想我会把它放在这里,这样它就不会被埋没。

只需向您的类添加一个 XmlRoot 属性,这将更改根节点的输出 xml。

例子:

0 投票
1 回答
112 浏览

.net - IXMLSerializeable

我需要为 2 个成员的自定义序列化实现 IXMLSerializeable,但我希望其余成员使用默认序列化进行序列化。或者至少,有没有办法让我调用其他成员的标准序列化?其他成员的类型是非常大且嵌套很深的类,在整个链条中定义每个成员的序列化是不切实际的。

0 投票
1 回答
214 浏览

.net - IXmlSerializable 如何让我避免 base64 的大小膨胀?

来自MSDN

实现这个接口有两个原因。第一个是控制 XmlSerializer 如何对对象进行序列化或反序列化。例如,您可以将数据分块为字节而不是缓冲大型数据集,并且还可以避免使用 Base64 编码对数据进行编码时发生的膨胀。

实施 IXmlSerializable 如何让我避免 base64 的大小膨胀?

我的意思是,假设我已经实现了 IXmlSerializable,并且我想将一个字节数组写入 XmlWriter。据我所知,最不膨胀的方法是 XmlWriter.WriteBase64 - 因为我不能直接写入数据 - 它会包含 XML 中无效的字节。