问题标签 [deserialization]

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 回答
983 浏览

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

我有一个 XML 文件,它表示 UI 中的表单的序列化实例。此表单由用户设计,并允许其他用户填写表单。保存表单后,实例数据将序列化到数据库中的列。我正在调用这个实例数据,我需要解析它,但在反序列化中遇到问题 - 使用 C# 标准反序列化。就用户而言,这是一个表单,但实例数据实际上是由“子表单”组成的——这些是用户看到的表单所包含的表单。

这是 XML 文档的格式:

可以看到,控件可以嵌套在其他控件中,属性是控件的一部分。

我将反序列化工作到表单级别,但是当我尝试反序列化控件时它会中断。

此文件中的嵌套控件对我来说并不重要 - 因为我希望获得所有控件的一个级别集合,无论层次结构及其所有属性如何。我想向控件添加一个属性,该属性指示它们的控件父名称(如果有的话) - 但除此之外,我想要一个具有控件及其属性的平面集合的对象。

有没有办法让反序列化查看这个 XML,就好像控件都在同一级别,而不管它们的层次结构如何,并且只是自动反序列化所有嵌套?

谢谢你的任何提示!

这是从 Visual Studio 2008 中的 XML 文件生成的 XSD(如您所见,原始 XML 没有每个表单上方的表单或每个部分上方的部分 - 我在加载 XML 时添加了它:

这是我用于反序列化的类的示例:

0 投票
1 回答
2568 浏览

java - 如何将xml反序列化为从axis2生成的java对象

在给定第三方 wsdl 的情况下,我使用 Eclipse 生成了一个 java 客户端代码存根。客户端工作得很好,我可以访问网络服务并做我需要做的事情。

现在,我想编写一些无需连接到 Web 服务即可运行的单元测试。是否可以在axis2堆栈中使用某种机制将xml文件反序列化为java客户端存根代码中的java对象之一?

例如,客户端存根代码中的类之一是“Contact”。假设我有一个 xml 文件,它模仿通常在肥皂请求中找到的 xml。如何将其反序列化为 java Contact 对象?

我以前使用过 XMLBeans,但希望有一种更简单的方法,因为 java 客户端似乎已经在某个地方进行了这种反序列化?也许axis2有一种方法可以获取一大块xml并返回一个java对象?

更新:

我试过这个:

我明白了:

然后,我尝试了这个:

但是后来我得到了 Contact Class 使用的类之一的异常does not have a no-arq default constructor

我希望这将是一件快速而简单的事情,但在我有时间完全了解axis2以及它如何使用jaxb之前,我将手动解析xml。

0 投票
4 回答
104225 浏览

java - Jackson JSON 库:如何实例化包含抽象字段的类

我想将 JSON 字符串转换为 java 对象,但该对象的类包含抽象字段,Jackson 无法实例化这些字段,并且不会生成该对象。告诉它抽象类的某些默认实现的最简单方法是什么,例如

或者根据 JSON 属性名称来决定实现类,例如。对于 JSON 对象:

我只想写:


我知道在 Jackson 中可以将类信息嵌入 JSON 中,但我不想使我使用的 JSON 格式复杂化。我想通过设置默认实现类或属性名称('cat')来决定使用哪个类 - 就像在 XStream 库中一样,您在其中编写:

有没有办法做到这一点,尤其是在一行中,还是需要更多代码?

0 投票
2 回答
259 浏览

c# - 用于对象序列化的 C# 元信息

假设我有一个名为的对象data,其中包含各种信息。让我们说一下,data图中实际上有很多东西。

如果我使用它进行序列化,BinaryFormatter那么我会得到一个文件,例如 5Mb。如果我将序列化流封装在一个中,GZipStream那么我会得到一个小得多的文件,比如 1Mb。

如果需要,我可以在压缩流的同时加密流,或者在不压缩流的情况下加密流。

问题是:我需要知道在序列化过程中做了什么,以便在反序列化时知道该怎么做。

一种技术是使用不同的文件扩展名。例如,未压缩、未加密的文件可能具有 .dat 扩展名,.zdat 表示压缩,.cdat 表示加密,.czdat 表示压缩和加密。

这会起作用,但它会带来一个潜在的问题:如果用户更改扩展名等怎么办。这也意味着如果我想在 Windows 中关联文件,则需要关联 4 个扩展名而不是 1 个 - 将与现有协会发生冲突的风险。

如果我将我的数据对象包装在一个简单的类中:

然后我基本上序列化一个对象,其中有一个序列化流,它可能被压缩和/或加密,但我们现在不知道也不关心,因为元信息存储在SerialisationContainer.

你怎么看?我基本上只是好奇你对这种方法的看法,以及在类似情况下你会做什么。我认为上述方法是一种非常浪费的方式来做我想做的事。我基本上需要将我的数据图序列化为内存流,将其转换为字符串,将字符串放入容器中,然后再次序列化。

另一个问题是string SerialisedData. 在我给出的示例中,我们只有大约 5Gb 的 BinaryData,但是当它开始变大时呢?我知道 64 位操作系统上的 a 上限string约为 2GB,而 32 位操作系统的上限要小得多。流有这样的限制吗?由于流是以字节块的形式写入的,因此它们不会写入是有道理的。

0 投票
6 回答
139180 浏览

c# - 使用 JavaScriptSerializer() 反序列化 JSON 文件

我将反序列化的 json 文件的结构如下所示;

我创建了一个类,该类将文件名作为 JavaScriptSerializer 的属性。我将用来反序列化 json 的代码如下;

我的问题是如何读取 json 文件上的用户字段。如下所示;

它具有子属性和值。我如何在我的 Response 课程中命名它们。我的响应类现在看起来像这样;

最好的情况是什么?

0 投票
0 回答
2178 浏览

c# - SAP Webservice 客户端 - 反序列化失败

我创建了一个简单的 Net WebSvc 客户端,它接收 Sap WebSvc 的最新参考。它需要一个字符串和四个通过引用发送的元素:三个自定义对象数组和任何集合结构之外的另一个自定义对象(我在参考页面中有它们的格式)

当调用执行操作的请求时,我在调用行上收到 SoapException“反序列化失败”。(在底部我写:我的代码摘录,我调用的 Reference.cs 方法和错误,尽我所能。

通过网络调查,我发现这个Thread of a SAP forum 有人回答显示此错误的常见问题是成员变量名称中未更新的wsdl和下划线,但它们都不是我的情况。实际上,该线程仍在继续,但对与我有相同问题的人没有任何回应。

无论如何,我猜 StackOverflow 的家伙比这更活跃 ;-)

在此先感谢人们!


我的代码摘录:

这是我的网络服务Reference.cs 附加方法:

错误:

System.Web.Services.Protocols.SoapException

未处理

Message="反序列化失败"

源="系统.Web.服务"

演员=""Lang="en"节点=""

角色=“”堆栈跟踪:

消息、WebResponse 响应、流

responseStream,布尔异步调用)

方法名,对象 [] 参数)

Destino, ZtyEE070[]& EtRequestHeader,

ZtyEE071[]& EtRequestObj, Zclrqstdat

IClrqst, Zrequest[]& TRequest) 在

D:\Documents and Settings\apacay\My

文档\Visual Studio

2005\项目\Desarrollo

SCM\scm.manager\SCM.Manager\Web

参考文献\mx.com.hylsamex.hmxwasd1\Reference.cs:第 85 行

D:\Documents and Settings\apacay\My

文档\Visual Studio

2005\项目\Desarrollo

SCM\scm.manager\SCM.Manager\SAPDataMockUp.cs:第 164 行

在 D:\Documents and Settings\apacay\My

文档\Visual Studio

2005\项目\Desarrollo

SCM\scm.manager\SCM.Manager\Threads\HandleSap.cs:第 24 行

在 D:\Documents and Settings\apacay\My

文档\Visual Studio

2005\项目\Desarrollo

SCM\scm.manager\SCM.Manager\Front.cs:第 170 行

程序集,字符串 [] 参数)

汇编文件,证据

装配安全,字符串 [] 参数)

执行上下文,上下文回调

回调,对象状态)

0 投票
2 回答
3849 浏览

java - 是否有任何杰克逊 json 策略(使用注释或其他方式),将在字段的反序列化之前和之后执行一些逻辑?

在对 POJO 的字段进行每次反序列化后,我需要执行一些代码。有什么办法可以通过一些杰克逊注释(或其他)策略来做到这一点?

  1. 一种方法是为每个字段类型创建一个自定义反序列化器,以实现 PostLogicDeserializerInterface 或扩展一些 PostLogicDeserializerAbstract。但这会产生大量难以维护的杂乱代码(而不仅仅是使用@JsonProperty)。所以我认为这不是一个好主意。

  2. 我看到您可以在类级别使用@JsonDeserialize,但只能用于值类。从文档中:

注释值类时,配置用于值类的实例,但可以被更具体的注释(附加到方法或字段的注释)覆盖。

所以我认为这也行不通。

  1. 在 POJO 的 setter 方法中使用一些自定义逻辑是一种不好的做法!另一方面,我认为杰克逊无论如何都使用反射来设置字段......也不是一个好策略。

我的目标是确定反序列化程序设置的字段百分比。我需要有一个计数器,在每次调用反序列化(填充字段)时都会增加。一旦整个类(POJO)反序列化结束,我需要使用反射执行一些逻辑。

现在实施的方式是

  • 一旦我让杰克逊映射器反序列化 POJO,我就会使用反射遍历每个字段
  • 检查它是否已设置,如果它是 null 或 -1 用于原始数字(以前的初始值)。(这种方法的一个缺点是如果设置了布尔值,您将无法检查它)
  • 使用反射进行其他类型的检查(我们称之为逻辑 X)
  • 执行取决于设置字段百分比和逻辑 X 的逻辑。

我更喜欢杰克逊策略,因为我不需要通过反射检查 POJO。它宁愿在原地完成(在 POJO 反序列化时)。

干杯,
暴君

0 投票
5 回答
31754 浏览

.net - 如何使用 JSON.NET 反序列化为嵌套/递归字典和列表?

我需要将复杂的 JSON blob 反序列化为标准 .NET 容器,以便在不知道 JSON 的代码中使用。它期望事物采用标准的 .NET 类型,特别是“对象”可以是原始的或递归的(字典或列表)Dictionary<string, object>List<object>

我不能使用静态类型来映射结果并且 JObject/JToken 不适合。理想情况下,会有某种方法(也许通过合同?)将原始 JSON 转换为基本的 .NET 容器。

我一直在寻找任何方法来诱使 JSON.NET 反序列化器在遇到“{}”或“[]”时创建这些简单类型,但收效甚微。

任何帮助表示赞赏!

0 投票
1 回答
6723 浏览

json - 使用 Lift-json 将 Json 值提取为 Map

Lift-json 的文档表明我应该能够调用“值”来获取我当前的 JObject 结构作为香草 Scala 映射。这种方法对我不起作用,因为“值”的返回类型是 json.Values 而不是 Map ,如示例所示。我究竟做错了什么?完成此转换是否需要隐式导入?

0 投票
0 回答
242 浏览

c# - sxd2Code 生成的代码在 VA2008/VS2010 中运行时可以很好地反序列化 xml 文件,但从 cmd 运行时则不行

我有一个架构文件,用于在 C# 中使用 xsd2code 生成相应的类。当我在 VS2010 调试器中运行应用程序时,我从我的 xml 文件中获取所有数据,但是当我从 cmd 运行 .exe 时,一些数据没有加载。任何想法为什么或如何找出原因?

因此,当我从调试器运行时,我总是会加载就业历史记录,但是当我将它作为 Windows 任务运行时,我根本不会获得就业历史记录。

谢谢,珍妮