0

在我的 xsd 文件中,我为类型约会提供了不同的日期格式:

<xs:complexType name="appointment">
  <xs:choice>
    <xs:element name="jahr.Monat.Tag.Zeit" minOccurs="0" type="xs:dateTime"/>
    <xs:element name="jahr.Monat.Tag" minOccurs="0" type="xs:date"/>
    <xs:element name="jahr.Monat" minOccurs="0" type="xs:gYearMonth"/>
    <xs:element name="jahr" minOccurs="0" type="xs:gYear"/>
  </xs:choice>
</xs:complexType>

这个json对象:

{
  "AppointmentElementOfTypeappintment":
         { 
             "jahr.Monat.Tag": "2002-09-24"
          } 
} 

以空元素结尾:

<AppointmentElementOfTypeappintment/>

只有当我选择 gYear 时,我才会在 xml 中得到一个填充元素:

{
  "AppointmentElementOfTypeappintment":
         { 
             "jahr": "2002"
          } 
}

结果是:

<AppointmentElementOfTypeappintment><jahr>2002</jahr></AppointmentElementOfTypeappintment>

我的映射对象如下:

...,
 {
    localName: 'appointment',
    propertyInfos: [{
        name: 'jahrMonatTagZeit',
        elementName: 'jahr.Monat.Tag.Zeit',
        typeInfo: 'DateTime'
      }, {
        name: 'jahrMonatTag',
        elementName: 'jahr.Monat.Tag',
        typeInfo: 'Date'
      }, {
        name: 'jahrMonat',
        elementName: 'jahr.Monat',
        typeInfo: 'GYearMonth'
      }, {
        name: 'jahr',
        typeInfo: 'GYear'
      }]
  }, ....
4

1 回答 1

0

你的映射说name:'jahrMonatTag',所以试试:

{
    "AppointmentElementOfTypeappintment":
    { 
        "jahrMonatTag": "2002-09-24"
    } 
}

更新

我明白这一点。但是,我传递给编组器的 json 数据来自外部模块,即我对字段名称没有影响。我在我的模块中所做的是将这些 json 转换为 xml。显然,他们使用的库从生成 jsons 的 DB 收集数据使用虚线形式的字段,即'jahr.Monat.Tag'.

然后您必须更改映射中的属性名称:

{
        name: 'jahr.Monat.Tag',
        elementName: 'jahr.Monat.Tag',
        typeInfo: 'Date'
}

如果您手动编写映射,这很容易做到。

如果您首先编写 XML Schema 并将其编译为映射,那么此时您将获得 Java 样式的属性名称 ( jahrMonatTagvs. jahr.Monat.Tag)。Jsonix Schema Compiler 目前不生成“原始”属性名称,但这是一个可实现的功能。请提出问题

免责声明:我是Jsonix的作者。

于 2016-07-15T06:51:55.597 回答