Grapeoff
@Grapeoff
В чём концепция...?

Можно ли в C# привести JSON в объект, но при этом не создавая его заранее?

Добрый вечер!
Продолжаю делать свой кликер, и мне в голову пришла идея сделать для него перевод на Английский, так как я собираюсь выкладывать это на itch.io.

Но так как компьютер от меня достаточно далеко, и проверить это самостоятельно я смогу только через полторы недели, то пишу сюда.

Все мы знаем, что когда мы десериализуем класс, то мы снова подставляем какие-то значения в его поля, то есть если мы сериализовали для класса А переменную В, то при десериализации свойство В объекта класса А будет хранить это значение.

Так вот, допустим я хочу создать JSON объект такого вида, где буду хранить текст для окна настроек (к примеру):

{
	"settings": {
		"volume": {
			"ru": "Громкость звука",
			"en": "Sound Volume"
		},
		"removeads": {
			"ru": "Убрать рекламу",
			"en": "Remove Ads"
		}
	}
}


А потом с помощью Unity JsonUtility сделать вот так:
object settingsText = JsonUtility.FromJson<object>("./text.json");


Смогу ли я потом сделать так: text.SetText(settingsText.settings.volume.ru);?

Может ли C# генерировать объекты с заданными свойствами самостоятельно, или же данное бремя лежит исключительно на разработчике, и именно я должен буду создать класс SettingsText с данными полями?
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
2chevskii
@2chevskii
Если бы каждый мог в поиск, тостер бы вымер.
Нет, не сможете, т.к. object не содержит в себе таких полей. Несмотря на то, что полученный обьект по факту эти поля содержит, при упаковке подобная конструкция выдаст ошибку компиляции. Выхода два - использовать Json.Net, который десериализует все в свои jobject, которые, по сути - словари, или же использовать DLR, но, как по мне - лучше повеситься, чем юзать такую медленную тему.
Ответ написан
Chronicler
@Chronicler
Программист
JSON -- это просто текст. В него вы сможете записать что угодно.
Если все нужные поля будут в наличии, то и десериализовать потом сможете.
Ответ -- да.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы