问题标签 [xml-serialization]

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

c# - XML 序列化和继承类型

继上一个问题之后,我一直致力于让我的对象模型序列化为 XML。但是我现在遇到了一个问题(平息惊喜!)。

我遇到的问题是我有一个集合,它是抽象基类类型,由具体派生类型填充。

我认为只需将 XML 属性添加到所有涉及的类就可以了,一切都会很好。可悲的是,事实并非如此!

所以我在谷歌上做了一些挖掘,现在我明白为什么它不起作用了。事实上,XmlSerializer正在做一些巧妙的反射,以便将对象序列化到 XML 或从 XML 序列化,并且由于它基于抽象类型,它无法弄清楚它到底在与什么对话。美好的。

我确实在 CodeProject 上遇到过这个页面,看起来它可能很有帮助(尚未完全阅读/使用),但我想我也想把这个问题带到 StackOverflow 表中,看看你是否有任何整洁的黑客/技巧,以便以最快/最轻的方式启动和运行。

我还应该补充的一件事是我不想走XmlInclude条路。与它的耦合太多了,而且系统的这个领域正在大力开发,所以这将是一个真正的维护头痛!

0 投票
19 回答
67185 浏览

c# - .NET XML 序列化问题?

在进行 C# XML 序列化时,我遇到了一些我认为我会分享的问题:


还有其他 XML 序列化问题吗?

0 投票
4 回答
14809 浏览

c# - XML 序列化和空集合

我有一个属性定义为:

如果 List<> Delete 没有项目

被发射。如果 List<> Delete 设置为 null

被发射。如果集合没有项目,有没有办法使用属性来获取不发出删除元素?

Greg - 非常感谢,我什至没有阅读 IsNullable 文档,只是假设它表明它不需要。

Rob Cooper - 我试图避免 ISerializable,但 Gregs 的建议有效。我确实遇到了您在 (1) 中概述的问题,如果集合长度为零,我只返回 null 就破坏了一堆代码。为了解决这个问题,我创建了一个 EventsBuilder 类(我正在序列化的类称为事件),它管理事件类的底层对象的所有生命周期/创建,这些对象会吐出我们的事件类进行序列化。

0 投票
3 回答
411 浏览

.net - .NET XML 序列化

我正在研究一组将用于序列化为 XML 的类。XML 不是由我控制的,而且组织得很好。不幸的是,有几组嵌套节点,其中一些的目的只是为了保存它们的子节点的集合。根据我目前对 XML 序列化的了解,这些节点需要另一个类。

有没有办法让一个类序列化到一组 XML 节点而不是一个。因为我觉得我像泥一样清楚,所以说我们有xml:

理想情况下,最好是 3 节课。root具有集合usergroup对象的类。但是,我能想到的最好的办法是,我需要一个用于rootusers、和的类user,其中和分别只包含 和 的集合,并且包含一个、和对象。groupsgroupusersgroupsusergrouprootusersgroups

有谁比我更懂?(别说谎,我知道有)。

0 投票
5 回答
2360 浏览

xml - 用于快速和肮脏的 XML 序列化的 Ruby 代码?

给定一个中等复杂的 XML 结构(数十个元素,数百个属性),没有 XSD 并希望创建一个对象模型,避免编写样板 from_xml() 和 to_xml() 方法的优雅方法是什么?

例如,给定:

如何避免编写无休止的序列:

我不介意明确创建对象结构;这是我确信可以通过一些更高级别的编程来处理的序列化......


我不想为每个类保存一两行(通过将 from_xml 行为移动到初始化程序或类方法等)。我正在寻找复制我的心理过程的“元”解决方案:

“我知道每个元素都将成为类名。我知道每个 XML 属性都将成为字段名。我知道要分配的代码就是 @#{attribute_name} = el.[#{attribute_name} ] 然后递归到子元素。然后在 to_xml 上反向。


我同意“构建器”类加上 XmlSimple 似乎是正确的道路的建议。XML -> 哈希 -> ? -> 对象模型(和利润!)


2008 年 9 月 18 日更新:@Roman、@fatgeekuk 和 @ScottKoon 的出色建议似乎已经解决了问题。我下载了 HPricot 源代码,看看它是如何解决问题的;关键方法显然是 instance_variable_set 和 class_eval 。irb 的工作非常令人鼓舞,现在正在走向实施....非常兴奋

0 投票
9 回答
67062 浏览

c# - 如何将 XML 映射到 C# 对象

我有一个想要加载到对象的 XML,操作这些对象(设置值、读取值),然后将这些 XML 保存回来。在我创建的结构 (xsd) 中包含 XML 对我来说很重要。

一种方法是编写我自己的序列化程序,但是否有内置支持或 C# 中的开源可以使用?

0 投票
15 回答
29707 浏览

php - 将 PHP 关联数组传入和传出 XML

有没有一种简单的方法可以将 PHP 关联数组与 XML 编组?例如,我有以下数组:

如何以尽可能少的行将其转换为类似于以下 XML 的内容,然后再返回?

我真的不在乎是否必须稍微更改数组结构,或者输出的 XML 是否与上面的示例不同。我一直在尝试使用 PHP 的XMLReaderXMLWriter,但是文档太差了,因此我生成的代码看起来不像我认为的那样:

在不编写我自己的自定义类的情况下获得 PHP 数组的基本原始 XML 转储真的比这更难吗?

我尽量避免梨。除了我在使用它时遇到的配置问题之外,我从未使用过我曾经使用过的任何软件包。

0 投票
2 回答
17461 浏览

.net - 在没有毫秒和 gmt 的情况下将 DateTime 序列化为时间

我使用 XSD 文件作为输入创建了一个 C# 类文件。我的一个属性如下所示:

序列化后,文件的内容现在如下所示:

是否有可能,在属性上使用 XmlAttributes,让它在没有毫秒和 GMT 值的情况下呈现?

这是可能的,还是在类被序列化后我需要将某种 xsl/xpath-replace-magic 组合在一起?

这不是将对象更改为 String 的解决方案,因为它在应用程序的其余部分中用作 DateTime,并允许我们使用 XmlSerializer.Serialize() 方法从对象创建 xml 表示。

我需要从字段中删除额外信息的原因是接收系统不符合时间数据类型的 w3c 标准。

0 投票
2 回答
7284 浏览

c# - 您可以强制将枚举值序列化为整数吗?

可能重复:
如何将枚举值序列化为 int?

大家好!

我想知道是否有一种方法可以强制将枚举值序列化为其整数值,而不是其字符串表示形式。

将您置于上下文中:在一个严重依赖 Web 服务的 Web 应用程序中,我们为所有请求标头使用单个基类,与请求类型无关。

我想在标题中添加一个 Result 字段,因此我们将有一个地方可以将有关操作如何在 Web 服务端进行的提示传递回调用应用程序。我们已经为此声明了一个枚举,但由于我们有旧应用程序调用那些可能不知道这些枚举的 Web 服务,我想将这些值作为整数发送序列化。

我们已经不得不通过使用 [XmlElement(ElementName = "string representationOfAttributeName")] 来减少这些标头的长度,因为我们偶尔会超过 IE 的最大 url 长度,我想知道是否有类似的属性来强制序列化枚举值转换为整数。

有人听说过这样的属性吗?

一如既往,感谢您的帮助,帕斯卡

0 投票
4 回答
3475 浏览

c# - 如何将 XML 文件反序列化为具有只读属性的类?

我有一个用作设置类的类,该类被序列化为 XML 文件,然后管理员可以对其进行编辑以更改应用程序中的设置。(设置比App.config允许的要复杂一些。)

我正在使用XmlSerializer该类来反序列化 XML 文件,并且我希望它能够设置属性类,但我不希望使用该类/程序集的其他开发人员能够通过代码设置/更改属性。我可以使用 XmlSerializer 类来实现这一点吗?

添加更多细节:这个特定的类是一个集合,根据 FxCop,XmlSerializer该类具有对反序列化只读集合的​​特殊支持,但我无法找到更多关于它的信息。这违反的规则的确切细节是:

返回集合的属性应该是只读的,这样用户就不能完全替换后备存储。用户仍然可以通过调用集合上的相关方法来修改集合的内容。请注意,XmlSerializer 类对反序列化只读集合具有特殊支持。有关详细信息,请参阅 XmlSerializer 概述。

这正是我想要的,但它是如何做到的呢?

编辑:好的,我想我在这里有点疯狂。就我而言,我所要做的就是在构造函数中初始化 Collection 对象,然后删除属性设置器。然后 XmlSerializable 对象实际上知道使用 Collection 对象中的 Add/AddRange 和 indexer 属性。以下确实有效!