JSONIX: получить ограничения и значение по умолчанию для свойств

Я использую JSONIX для маршалинга и демаршаллинга XML-файлов. Пока это работает довольно хорошо. Чего мне не хватает, так это возможности получить значения и ограничения по умолчанию, такие как minOccours и maxOccours-Values. Возможно ли это как-то с JSONIX?

Эти свойства:

    <xsd:sequence>
      <xsd:element name="inflowMin" type="framework:flowType" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="inflowMax" type="framework:flowType" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="unitOfFlowControl" type="framework:flowUnit" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="waterCosts" type="xsd:double" default="0.0"/>
    <xsd:attribute name="controllable" type="xsd:boolean" default="0"/>
    <xsd:attribute name="scalingOfControl" type="xsd:double" default="1.0" />

Получить:

    propertyInfos: [{
        type: 'element',
        name: 'inflowMin',
        elementName: 'inflowMin',
        typeInfo: ...
    }, {
        type: 'element',
        name: 'inflowMax',
        elementName: 'inflowMax',
        typeInfo: ...
    }, {
        type: 'element',
        name: 'unitOfFlowControl',
        elementName: 'unitOfFlowControl',
        typeInfo: 'String'
    }, {
        name: 'waterCosts',
        typeInfo: 'Double',
        attributeName: 'waterCosts',
        type: 'attribute'
    }, {
        name: 'controllable',
        typeInfo: 'Boolean',
        attributeName: 'controllable',
        type: 'attribute'
    }, {
        name: 'scalingOfControl',
        typeInfo: 'Double',
        attributeName: 'scalingOfControl',
        type: 'attribute'
    }]
}

Спасибо!

2 ответа

Решение

Запрошенная вами функция теперь реализована в Jsonix 2.3.2 и Jsonix Schema Compiler 2.3.7.

Jsonix Schema Compiler теперь производит required, minOccurs а также maxOccurs в сгенерированных сопоставлениях и схеме JSON.

Вот как это выглядит в отображениях:

  {
    localName: 'Items',
    propertyInfos: [{
        name: 'item',
        minOccurs: 0,
        maxOccurs: 100,
        collection: true,
        elementName: {
          localPart: 'item'
        },
        typeInfo: '.Items.Item'
      }]
  }

И в схеме JSON:

    "Items":{
        "type":"object",
        "title":"Items",
        "properties":{
            "item":{
                "title":"item",
                "allOf":[
                    {
                        "type":"array",
                        "items":{
                            "$ref":"#/definitions/Items.Item"
                        },
                        "maxItems":100,
                        "minItems":0
                    }
                ],
                "propertyType":"element",
                "elementName":{
                    "localPart":"item",
                    "namespaceURI":""
                }
            }
        },
        "typeType":"classInfo",
        "typeName":{
            "localPart":"Items",
            "namespaceURI":""
        },
        "propertiesOrder":[
            "item"
        ]
    }

Вы можете получить доступ к этим метаданным из контекста Jsonix следующим образом:

    var context = new Jsonix.Context([ PO ]);
    var itemsClassInfo = context.getTypeInfoByName("PO.Items");
    var itemPropertyInfo = itemsClassInfo.getPropertyInfoByName("item");
    test.equal(false, itemPropertyInfo.required);
    test.equal(0, itemPropertyInfo.minOccurs);
    test.equal(100, itemPropertyInfo.maxOccurs);
    test.done();

Отказ от ответственности: я автор.

На данный момент нет, эта информация еще не сформирована. Тогда была эта проблема, но она не была реализована.

Если вы заинтересованы в этой функции, пожалуйста, подайте две проблемы здесь (одна для значения по умолчанию, а другая для minOccurs/maxOccurs).

В принципе, эта информация доступна из XML-схемы, но в некоторых случаях ее нельзя явно сопоставить сгенерированной моделью. В некоторых странных случаях, таких как повторяющийся выбор или последовательность, это не будет работать, но в большинстве случаев это будет работать. Так что это осуществимо, пожалуйста, подайте вопросы.

Вам просто нужны эти вещи в сгенерированных отображениях? Или какой-то API для доступа к нему?

Другие вопросы по тегам