强制 jsonix 输出 xsi:type 属性

Force jsonix to output xsi:type attribute

根据 Jsonix 关于其对 xsi:type 支持的 wiki 页面:

When marshalling, Jsonix checks, if the value has the same type as declared in the property or element declaration

我想知道是否有办法显式让 Jsonix 生成该属性?我能够通过指定 TYPE_NAME 属性 在另一个项目中做到这一点,即

  element: {
    TYPE_NAME: 'mapping.Element',
    xAttr1: '1',
    xAttr2: '2',
    content: 'some content',
  },

现在我再次进行一些 XML 导出,但同样的方法不再有效,即我得到了正确的 xml,但缺少 xsi:typeHere 是一个有效的 fiddle 使用我的映射的精简版本,它显示了如何使用一种类型解组项目然后在没有类型的情况下进行编组。

在您的示例中,您的未编组 Title 具有类型 Mappings.SomeType,它与您的映射匹配。所以 Jsonix 不需要输出 xsi:type 因为有匹配项。

如果我没理解错的话,你希望 Jsonix 总是 输出 xsi:type。不确定您为什么需要这个,但这不受 OOTB 支持。

您可能需要修补 Jsonix 才能获得此功能。这是 Jsonix 决定是否添加 xsi:type 或不添加的地方:

https://github.com/highsource/jsonix/blob/22b8800aa5acb645d614d01b858d0c8a25a3075f/scripts/src/main/javascript/org/hisrc/jsonix/Jsonix/Binding/Marshalls.js#L20

由于我不太清楚一般情况下强制 xsi:type 输出的必要性,因此我认为 Jsonix 中不应包含此功能。所以你最终可能会得到自己的叉子。