Есть ли способ указать имена полей для serde во время выполнения?

Я пытаюсь десериализовать структуру JSON с помощью serde, но где некоторые поля имена могут быть разными в разных средах. Например:

В dev:

{
    "fields": {
        "field004": "This is the title",
        "field012": 456123
    }
}

В продукте:

{
    "fields": {
        "field023": "This is the title",
        "field005": 456123
    }
}

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

Все остальные результаты, которые я обнаружил при поиске решения этой проблемы, не касаются моей конкретной проблемы.

Есть ли способ указать имя поля во время выполнения, или мне придется вручную реализовать для него десериализатор и таким образом использовать имена полей, заданные конфигурацией?


person Sid Holland    schedule 16.08.2020    source источник
comment
Это возможно, если вы используете нетипизированные значения JSON. . В противном случае я не думаю, что вы можете сделать это, не перечислив параметры в атрибуте.   -  person Herohtar    schedule 16.08.2020
comment
@Herohtar Спасибо за предложение. Я подумал об этом, но структура JSON, с которой я работаю, на самом деле довольно глубокая, поэтому мне придется много работать, как только я верну Value. Я почти закончил реализацию десериализатора, но по-другому.   -  person Sid Holland    schedule 16.08.2020
comment
Можно ли использовать то же имя поля из dev в продукте для другой цели?   -  person Peter Hall    schedule 16.08.2020
comment
@PeterHall К сожалению, да.   -  person Sid Holland    schedule 16.08.2020
comment
@SidHolland, вы можете создать специальную структуру для fields с помощью пользовательской схемы десериализации, таким образом, вы можете трансформируйте поля, как хотите, возможно, на основе envvar. В качестве альтернативы, если во время компиляции известно, что такое dev и prod, вы можете просто использовать условную структуру (одна версия будет настроена для производственной среды, а другая - для среды разработки).   -  person Masklinn    schedule 16.08.2020