问题标签 [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.
java - 如何将类型添加到 GWT 的序列化策略白名单?
GWT 的序列化程序支持有限java.io.Serializable
,但出于安全原因,它支持的类型有一个白名单。我找到的文档,例如这个 FAQ 条目说你想要序列化的任何类型“必须包含在序列化策略白名单中”,并且该列表是在编译时生成的,但没有解释编译器如何决定白名单上发生了什么。
生成的列表包含许多属于标准库的类型,例如java.lang.String
和java.util.HashMap
。尝试序列化时出现错误java.sql.Date
,它实现了Serializable
接口,但不在白名单上。如何将此类型添加到列表中?
java - 如何最好地序列化 java.awt.Image?
我有一个 Serializable 对象,它应该将 java.awt.Image 作为其成员。我应该如何序列化它? (从一个不太清楚的第一个版本编辑,对不起。)
java - 使用 serialVersionUID 还是禁止警告?
我想创建一个类,例如,扩展 HttpServlet?我的编译器警告我,我的类应该有一个 serialVersionUID。如果我知道这个对象永远不会被序列化,我应该定义它还是添加注释来禁止这些警告?
你会做什么,为什么?
json - JSON 编辑器/格式化程序?
我有一些 JSON 数据,但都在一条线上。有谁知道可以为我格式化(例如缩进和插入新行)这些数据的网络或 Windows 编辑器,以便我可以更好地阅读它?最好是使用 GUI 来显示 JSON,而不是使用命令行工具来输出重新格式化的文档,例如。
c# - C# ResetBinding 翻转 DataGridView *用示例更新*
我遇到了一个部分解决的问题。快速解释一下:我有一个绑定到需要序列化的复杂对象的网格。从序列化中构建对象时,网格上的事件不会刷新表格显示。有人告诉我在反序列化后重建事件,它可以工作!但是刷新网格的事件似乎根本没有触发。
我必须从我的复杂对象构建一个事件,告诉我内部发生了一些变化。从这个事件我添加了这个代码:
问题是网格在翻转,用户感觉不好(行上下移动而不是停止)。
如何在没有这种翻转的情况下重置绑定?我怎样才能解决原来的问题?(这将自动解决所有问题)。
更新
这是一个执行完全相同行为的示例:
创建一个类:
现在,使用 BindingSource 调用“bindingSource1”创建一个表单,并使用该类作为数据源。创建一个网格并将该网格绑定到 bindingsource1。
在该表单中,在 load 中使用此代码:
我将序列化过程放在注释中,因为如果没有它,它似乎会出现同样奇怪的行为......现在启动应用程序。更改客户的名称。“新名称”的示例“p1”,然后单击已更改名称下的单元格。您将看到“len”列没有改变。但是,如果您单击具有 len 的单元格,您将看到数字变为正确的值。
有人知道为什么吗?
java - java对象序列化在1.5和1.6之间是否兼容
我想知道混合 jdk 1.5 和 1.6(Java 6)对象序列化(双向通信)是否安全。我搜索了 sun 关于这个问题的明确声明,但没有成功。因此,除了技术可行性之外,我还在寻找有关该问题的“官方”声明。
c# - 是否有将源代码转回 CodeCompileUnit 的现有方法?
我们在我们自己的设计师中使用了 DesignSurface 和所有优秀的 IDesignerHost。然后将设计的表格以我们自己的定制格式保留,一切都很好。我们还希望将表单导出为基于文本的格式(我们已经这样做了,因为它并不难)。
但是,我们还希望将该文本导入设计器的文档中,这涉及将设计器代码返回到 CodeCompileUnit。不幸的是, Parse 方法没有实现(毫无疑问,有充分的理由)。有替代方案吗?我们不想使用标准 .NET 安装中不存在的任何东西(例如随 Visual Studio 安装的 .NET 库)。
我目前的想法是编译导入的文本,然后实例化表单并将其属性和控件复制到设计表面对象,然后捕获新的 CodeCompileUnit,但我希望有更好的方法。谢谢。
更新:我虽然有些人可能对我们的进展感兴趣。到目前为止,不太好。我发现的简要概述是 Parse 方法没有实现,因为它被认为太难了,存在可以完成工作的开源解析器,但它们并不完整,因此不能保证在所有情况下都能正常工作( NRefactory 是 SharpDevelop 项目中的一个,我相信),并且从实例到设计器的控件复制目前还没有工作。我相信这是因为尽管控件被添加到设计器表面包装的表单实例中,但设计器表面并没有意识到它们的包含。我们的下一个尝试是模拟剪切/粘贴,看看是否能解决它。显然,这是一个巨大的讨厌的解决方法,但我们需要它工作,所以我们'
c# - C#中的设计时间序列化
我在 C# 中创建了一个非可视组件,它被设计为表单上元数据的占位符。
该组件有一个属性,它是自定义对象的集合,该对象被标记为可序列化,并实现了用于序列化的 GetObjectData 和用于反序列化的公共构造函数。
在表单的 resx 文件中,它将生成用于存储集合的二进制数据,但是每当我对序列化类进行更改时,我都会遇到设计器错误,需要从 resx 文件中手动删除数据,然后重新创建此数据。
我尝试更改构造函数以在类中的每个属性周围都有一个 try / catch 块
但它仍然崩溃。我得到的最后一个错误是我必须实现 IConvertible。
我更喜欢使用 xml 序列化,因为我至少可以看到它,设计师可以使用它吗?
有没有办法让序列化更稳定,对变化的抵抗力更小?
编辑:
更多信息...更好的描述也许
我有一个从组件继承的类,它有一个属性是规则的集合。RulesCollection 似乎必须标记为 Serializable,否则它不会保留其成员。
Rules 类也是一个组件,其属性为 DesignTimeVisible(false) 以阻止它显示在组件托盘中,该类未标记为 Serializable。
将集合标记为可序列化会在 resx 文件中生成二进制数据(不理想),并且 IDE 会报告规则类不可序列化。
我认为这个问题已经超出了一个简单的问题。所以我可能会很快关闭它。
如果有人有任何指向类似内容的链接,那将有很大帮助。
asp.net - 如何从 ASP.NET Web 服务实现自定义 JSON 序列化?
从 WebService 返回自定义类的实例时,有哪些序列化选项?
我们有一些具有许多子集合类属性的类,以及可能根据使用情况设置或不设置的其他属性。这些对象是从用 ScriptService 属性修饰的 ASP.NET .asmx WebService 返回的,因此在由各种 WebMethods 返回时通过 JSON 序列化进行序列化。
问题是开箱即用的序列化返回所有公共属性,无论它们是否被使用,以及返回类名和其他信息的方式比你想要限制数量更详细交通。
目前,对于返回的类,我们添加了处理 JSON 序列化的自定义 javascript 转换器,并将它们添加到 web.config 中,如下所示:
但这需要每个类都有一个自定义转换器。是否有任何其他方法可以通过扩展服务、创建自定义序列化程序等来更改开箱即用的 JSON 序列化?
跟进
@marxidad:
我们在其他应用程序中使用 DataContractJsonSerializer 类,但是我一直无法弄清楚如何将它应用于这些服务。以下是如何设置服务的示例:
WebMethods 由 javascript 调用并返回 JSON 序列化的数据。我们能够更改序列化的唯一方法是使用上面提到的 javascript 转换器?
有没有办法告诉 WebService 使用自定义 DataContractJsonSerializer?是否通过 web.config 配置,用属性装饰服务等?
更新
好吧,除了像上面那样创建单独的 JavaScriptConverters 之外,我们找不到任何方法来切换开箱即用的 JavaScriptSerializer。
为此,我们为避免创建单独的转换器所做的是创建一个通用的 JavaScriptConverter。我们向我们想要处理的类添加了一个空接口,并且在 Web 服务启动时调用的 SupportedTypes 使用反射来查找实现该接口的任何类型,如下所示:
实际实现有点不同,因此类型被缓存,我们可能会重构它以使用自定义属性而不是空接口。
然而,在处理自定义集合时,我们遇到了一个稍微不同的问题。这些通常只是扩展一个通用列表,但使用自定义类而不是 List<> 本身,因为集合类中通常存在自定义逻辑、排序等。
问题是 JavaScriptConverter 的 Serialize 方法返回一个字典,该字典被序列化为 JSON 作为具有关联类型的名称值对,而列表作为数组返回。因此无法使用转换器轻松序列化集合类。解决方案是不将这些类型包含在转换器的 SupportedTypes 中,并且它们完美地序列化为列表。
因此,序列化有效,但是当您尝试以其他方式将这些对象作为 Web 服务调用的参数传递时,反序列化会中断,因为它们不能将输入视为字符串/对象字典列表,这可以' 不会被转换为集合包含的任何自定义类的列表。我们能找到解决这个问题的唯一方法是创建一个泛型类,它是一个字符串/对象字典列表,然后将列表转换为适当的自定义集合类,然后更改任何 Web 服务参数以使用泛型类.
我敢肯定这里有很多问题和违反“最佳实践”的行为,但它为我们完成了工作,而无需创建大量自定义转换器类。