Парсинг Json сторонней программы
Цитата: Удаленный пользователь от 31.05.2022, 00:30🙋Приветствую.
Вот Json файл который нужно парсить. (Его структура не полная. Это лишь вариация как сохранены настройки.
[spoiler title="Json файл:"]{ "autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"","encounterList":[],"encounterStep":30,"height":1,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":1,"width":3, "data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "events":[ null, {"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":241,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":0,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":0,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":0,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":0,"parameters":[1]},{"code":231,"indent":0,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":241,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":0,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":0,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":0,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":0,"parameters":[1]},{"code":231,"indent":0,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":0,"y":0}, {"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":4,"walkAnime":true}],"x":1,"y":0}, {"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":241,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":0,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":0,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":0,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":0,"parameters":[1]},{"code":231,"indent":0,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":4,"walkAnime":true}],"x":2,"y":0} ] }[/spoiler]
Так вот. Необходимо пройтись по каждому events и по каждой pages в них и найти следующие команды:
"code": 121
"code": 122"code":241
"code":245"code": 249"code": 250
"code": 261"code": 117
"code": 231
Цель сделать программу которая будет производить поиск тех или иных команд и показывать в каких именно файлах -> события и страницах находятся данные команды.
Конечно можно было бы сделать поиск как по строке но в данном случае необходимо получить данные. В случае поиска команд"code": 241, "code": 245, "code": 249,"code": 250, "code": 261
нужно также искать дополнительное значение в поле name которое а в случае с командой "code": 231 то поле name отсуствует но в данном случае искать нужно Actor1_8.Так что тут я думаю необходим парсинг json. И вот без понятия как это делать когда структура не известна.
🙋Приветствую.
Вот Json файл который нужно парсить. (Его структура не полная. Это лишь вариация как сохранены настройки.
{
"autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"","encounterList":[],"encounterStep":30,"height":1,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":1,"width":3,
"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
"events":[
null,
{"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":241,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":0,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":0,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":0,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":0,"parameters":[1]},{"code":231,"indent":0,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":241,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":0,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":0,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":0,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":0,"parameters":[1]},{"code":231,"indent":0,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":0,"y":0},
{"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,1,1,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":101,"indent":0,"parameters":["",0,0,0,""]},{"code":401,"indent":0,"parameters":["фыввфывфы"]},{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":111,"indent":0,"parameters":[0,1,0]},{"code":241,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":1,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":1,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":1,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":1,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":1,"parameters":[1]},{"code":231,"indent":1,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":4,"walkAnime":true}],"x":1,"y":0},
{"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":121,"indent":0,"parameters":[1,1,0]},{"code":122,"indent":0,"parameters":[1,1,0,0,0]},{"code":241,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":245,"indent":0,"parameters":[{"name":"City","volume":90,"pitch":100,"pan":0}]},{"code":249,"indent":0,"parameters":[{"name":"Inn1","volume":90,"pitch":100,"pan":0}]},{"code":250,"indent":0,"parameters":[{"name":"Battle1","volume":90,"pitch":100,"pan":0}]},{"code":261,"indent":0,"parameters":["waiting-icon-gif-1"]},{"code":117,"indent":0,"parameters":[1]},{"code":231,"indent":0,"parameters":[1,"Actor1_8",0,0,0,0,100,100,255,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":4,"walkAnime":true}],"x":2,"y":0}
]
}
Так вот. Необходимо пройтись по каждому events и по каждой pages в них и найти следующие команды:
"code": 121
"code":241
"code":245
"code": 250
"code": 117
"code": 231
Цель сделать программу которая будет производить поиск тех или иных команд и показывать в каких именно файлах -> события и страницах находятся данные команды.
Конечно можно было бы сделать поиск как по строке но в данном случае необходимо получить данные. В случае поиска команд
"code": 241, "code": 245, "code": 249,"code": 250, "code": 261
нужно также искать дополнительное значение в поле name которое а в случае с командой "code": 231 то поле name отсуствует но в данном случае искать нужно Actor1_8.
Так что тут я думаю необходим парсинг json. И вот без понятия как это делать когда структура не известна.
Цитата: Удаленный пользователь от 31.05.2022, 07:20Приветствую.
Не может быть json неизвестной структуры. Его же как-то должна программа, которая его использует сериализовать / десериализовать.
[spoiler title=""]namespace QuickType { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Temperatures { [JsonProperty("autoplayBgm")] public bool AutoplayBgm { get; set; } [JsonProperty("autoplayBgs")] public bool AutoplayBgs { get; set; } [JsonProperty("battleback1Name")] public string Battleback1Name { get; set; } [JsonProperty("battleback2Name")] public string Battleback2Name { get; set; } [JsonProperty("bgm")] public Bgm Bgm { get; set; } [JsonProperty("bgs")] public Bgm Bgs { get; set; } [JsonProperty("disableDashing")] public bool DisableDashing { get; set; } [JsonProperty("displayName")] public string DisplayName { get; set; } [JsonProperty("encounterList")] public object[] EncounterList { get; set; } [JsonProperty("encounterStep")] public long EncounterStep { get; set; } [JsonProperty("height")] public long Height { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("parallaxLoopX")] public bool ParallaxLoopX { get; set; } [JsonProperty("parallaxLoopY")] public bool ParallaxLoopY { get; set; } [JsonProperty("parallaxName")] public string ParallaxName { get; set; } [JsonProperty("parallaxShow")] public bool ParallaxShow { get; set; } [JsonProperty("parallaxSx")] public long ParallaxSx { get; set; } [JsonProperty("parallaxSy")] public long ParallaxSy { get; set; } [JsonProperty("scrollType")] public long ScrollType { get; set; } [JsonProperty("specifyBattleback")] public bool SpecifyBattleback { get; set; } [JsonProperty("tilesetId")] public long TilesetId { get; set; } [JsonProperty("width")] public long Width { get; set; } [JsonProperty("data")] public long[] Data { get; set; } [JsonProperty("events")] public Event[] Events { get; set; } } public partial class Bgm { [JsonProperty("name")] public Name Name { get; set; } [JsonProperty("pan")] public long Pan { get; set; } [JsonProperty("pitch")] public long Pitch { get; set; } [JsonProperty("volume")] public long Volume { get; set; } } public partial class Event { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("pages")] public Page[] Pages { get; set; } [JsonProperty("x")] public long X { get; set; } [JsonProperty("y")] public long Y { get; set; } } public partial class Page { [JsonProperty("conditions")] public Conditions Conditions { get; set; } [JsonProperty("directionFix")] public bool DirectionFix { get; set; } [JsonProperty("image")] public Image Image { get; set; } [JsonProperty("list")] public PageList[] List { get; set; } [JsonProperty("moveFrequency")] public long MoveFrequency { get; set; } [JsonProperty("moveRoute")] public MoveRoute MoveRoute { get; set; } [JsonProperty("moveSpeed")] public long MoveSpeed { get; set; } [JsonProperty("moveType")] public long MoveType { get; set; } [JsonProperty("priorityType")] public long PriorityType { get; set; } [JsonProperty("stepAnime")] public bool StepAnime { get; set; } [JsonProperty("through")] public bool Through { get; set; } [JsonProperty("trigger")] public long Trigger { get; set; } [JsonProperty("walkAnime")] public bool WalkAnime { get; set; } } public partial class Conditions { [JsonProperty("actorId")] public long ActorId { get; set; } [JsonProperty("actorValid")] public bool ActorValid { get; set; } [JsonProperty("itemId")] public long ItemId { get; set; } [JsonProperty("itemValid")] public bool ItemValid { get; set; } [JsonProperty("selfSwitchCh")] public string SelfSwitchCh { get; set; } [JsonProperty("selfSwitchValid")] public bool SelfSwitchValid { get; set; } [JsonProperty("switch1Id")] public long Switch1Id { get; set; } [JsonProperty("switch1Valid")] public bool Switch1Valid { get; set; } [JsonProperty("switch2Id")] public long Switch2Id { get; set; } [JsonProperty("switch2Valid")] public bool Switch2Valid { get; set; } [JsonProperty("variableId")] public long VariableId { get; set; } [JsonProperty("variableValid")] public bool VariableValid { get; set; } [JsonProperty("variableValue")] public long VariableValue { get; set; } } public partial class Image { [JsonProperty("characterIndex")] public long CharacterIndex { get; set; } [JsonProperty("characterName")] public string CharacterName { get; set; } [JsonProperty("direction")] public long Direction { get; set; } [JsonProperty("pattern")] public long Pattern { get; set; } [JsonProperty("tileId")] public long TileId { get; set; } } public partial class PageList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("indent")] public long Indent { get; set; } [JsonProperty("parameters")] public ParameterElement[] Parameters { get; set; } } public partial class MoveRoute { [JsonProperty("list")] public MoveRouteList[] List { get; set; } [JsonProperty("repeat")] public bool Repeat { get; set; } [JsonProperty("skippable")] public bool Skippable { get; set; } [JsonProperty("wait")] public bool Wait { get; set; } } public partial class MoveRouteList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("parameters")] public object[] Parameters { get; set; } } public enum Name { Battle1, City, Empty, Inn1 }; public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы }; public partial struct ParameterElement { public Bgm Bgm; public ParameterEnum? Enum; public long? Integer; public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm }; public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum }; public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer }; } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { NameConverter.Singleton, ParameterElementConverter.Singleton, ParameterEnumConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class NameConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return Name.Empty; case "Battle1": return Name.Battle1; case "City": return Name.City; case "Inn1": return Name.Inn1; } throw new Exception("Cannot unmarshal type Name"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (Name)untypedValue; switch (value) { case Name.Empty: serializer.Serialize(writer, ""); return; case Name.Battle1: serializer.Serialize(writer, "Battle1"); return; case Name.City: serializer.Serialize(writer, "City"); return; case Name.Inn1: serializer.Serialize(writer, "Inn1"); return; } throw new Exception("Cannot marshal type Name"); } public static readonly NameConverter Singleton = new NameConverter(); } internal class ParameterElementConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { switch (reader.TokenType) { case JsonToken.Integer: var integerValue = serializer.Deserialize<long>(reader); return new ParameterElement { Integer = integerValue }; case JsonToken.String: case JsonToken.Date: var stringValue = serializer.Deserialize<string>(reader); switch (stringValue) { case "": return new ParameterElement { Enum = ParameterEnum.Empty }; case "Actor1_8": return new ParameterElement { Enum = ParameterEnum.Actor18 }; case "waiting-icon-gif-1": return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 }; case "фыввфывфы": return new ParameterElement { Enum = ParameterEnum.Фыввфывфы }; } break; case JsonToken.StartObject: var objectValue = serializer.Deserialize<Bgm>(reader); return new ParameterElement { Bgm = objectValue }; } throw new Exception("Cannot unmarshal type ParameterElement"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { var value = (ParameterElement)untypedValue; if (value.Integer != null) { serializer.Serialize(writer, value.Integer.Value); return; } if (value.Enum != null) { switch (value.Enum) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } } if (value.Bgm != null) { serializer.Serialize(writer, value.Bgm); return; } throw new Exception("Cannot marshal type ParameterElement"); } public static readonly ParameterElementConverter Singleton = new ParameterElementConverter(); } internal class ParameterEnumConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return ParameterEnum.Empty; case "Actor1_8": return ParameterEnum.Actor18; case "waiting-icon-gif-1": return ParameterEnum.WaitingIconGif1; case "фыввфывфы": return ParameterEnum.Фыввфывфы; } throw new Exception("Cannot unmarshal type ParameterEnum"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (ParameterEnum)untypedValue; switch (value) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } throw new Exception("Cannot marshal type ParameterEnum"); } public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter(); } }[/spoiler]
Приветствую.
Не может быть json неизвестной структуры. Его же как-то должна программа, которая его использует сериализовать / десериализовать.
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Temperatures
{
[JsonProperty("autoplayBgm")]
public bool AutoplayBgm { get; set; }
[JsonProperty("autoplayBgs")]
public bool AutoplayBgs { get; set; }
[JsonProperty("battleback1Name")]
public string Battleback1Name { get; set; }
[JsonProperty("battleback2Name")]
public string Battleback2Name { get; set; }
[JsonProperty("bgm")]
public Bgm Bgm { get; set; }
[JsonProperty("bgs")]
public Bgm Bgs { get; set; }
[JsonProperty("disableDashing")]
public bool DisableDashing { get; set; }
[JsonProperty("displayName")]
public string DisplayName { get; set; }
[JsonProperty("encounterList")]
public object[] EncounterList { get; set; }
[JsonProperty("encounterStep")]
public long EncounterStep { get; set; }
[JsonProperty("height")]
public long Height { get; set; }
[JsonProperty("note")]
public string Note { get; set; }
[JsonProperty("parallaxLoopX")]
public bool ParallaxLoopX { get; set; }
[JsonProperty("parallaxLoopY")]
public bool ParallaxLoopY { get; set; }
[JsonProperty("parallaxName")]
public string ParallaxName { get; set; }
[JsonProperty("parallaxShow")]
public bool ParallaxShow { get; set; }
[JsonProperty("parallaxSx")]
public long ParallaxSx { get; set; }
[JsonProperty("parallaxSy")]
public long ParallaxSy { get; set; }
[JsonProperty("scrollType")]
public long ScrollType { get; set; }
[JsonProperty("specifyBattleback")]
public bool SpecifyBattleback { get; set; }
[JsonProperty("tilesetId")]
public long TilesetId { get; set; }
[JsonProperty("width")]
public long Width { get; set; }
[JsonProperty("data")]
public long[] Data { get; set; }
[JsonProperty("events")]
public Event[] Events { get; set; }
}
public partial class Bgm
{
[JsonProperty("name")]
public Name Name { get; set; }
[JsonProperty("pan")]
public long Pan { get; set; }
[JsonProperty("pitch")]
public long Pitch { get; set; }
[JsonProperty("volume")]
public long Volume { get; set; }
}
public partial class Event
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("note")]
public string Note { get; set; }
[JsonProperty("pages")]
public Page[] Pages { get; set; }
[JsonProperty("x")]
public long X { get; set; }
[JsonProperty("y")]
public long Y { get; set; }
}
public partial class Page
{
[JsonProperty("conditions")]
public Conditions Conditions { get; set; }
[JsonProperty("directionFix")]
public bool DirectionFix { get; set; }
[JsonProperty("image")]
public Image Image { get; set; }
[JsonProperty("list")]
public PageList[] List { get; set; }
[JsonProperty("moveFrequency")]
public long MoveFrequency { get; set; }
[JsonProperty("moveRoute")]
public MoveRoute MoveRoute { get; set; }
[JsonProperty("moveSpeed")]
public long MoveSpeed { get; set; }
[JsonProperty("moveType")]
public long MoveType { get; set; }
[JsonProperty("priorityType")]
public long PriorityType { get; set; }
[JsonProperty("stepAnime")]
public bool StepAnime { get; set; }
[JsonProperty("through")]
public bool Through { get; set; }
[JsonProperty("trigger")]
public long Trigger { get; set; }
[JsonProperty("walkAnime")]
public bool WalkAnime { get; set; }
}
public partial class Conditions
{
[JsonProperty("actorId")]
public long ActorId { get; set; }
[JsonProperty("actorValid")]
public bool ActorValid { get; set; }
[JsonProperty("itemId")]
public long ItemId { get; set; }
[JsonProperty("itemValid")]
public bool ItemValid { get; set; }
[JsonProperty("selfSwitchCh")]
public string SelfSwitchCh { get; set; }
[JsonProperty("selfSwitchValid")]
public bool SelfSwitchValid { get; set; }
[JsonProperty("switch1Id")]
public long Switch1Id { get; set; }
[JsonProperty("switch1Valid")]
public bool Switch1Valid { get; set; }
[JsonProperty("switch2Id")]
public long Switch2Id { get; set; }
[JsonProperty("switch2Valid")]
public bool Switch2Valid { get; set; }
[JsonProperty("variableId")]
public long VariableId { get; set; }
[JsonProperty("variableValid")]
public bool VariableValid { get; set; }
[JsonProperty("variableValue")]
public long VariableValue { get; set; }
}
public partial class Image
{
[JsonProperty("characterIndex")]
public long CharacterIndex { get; set; }
[JsonProperty("characterName")]
public string CharacterName { get; set; }
[JsonProperty("direction")]
public long Direction { get; set; }
[JsonProperty("pattern")]
public long Pattern { get; set; }
[JsonProperty("tileId")]
public long TileId { get; set; }
}
public partial class PageList
{
[JsonProperty("code")]
public long Code { get; set; }
[JsonProperty("indent")]
public long Indent { get; set; }
[JsonProperty("parameters")]
public ParameterElement[] Parameters { get; set; }
}
public partial class MoveRoute
{
[JsonProperty("list")]
public MoveRouteList[] List { get; set; }
[JsonProperty("repeat")]
public bool Repeat { get; set; }
[JsonProperty("skippable")]
public bool Skippable { get; set; }
[JsonProperty("wait")]
public bool Wait { get; set; }
}
public partial class MoveRouteList
{
[JsonProperty("code")]
public long Code { get; set; }
[JsonProperty("parameters")]
public object[] Parameters { get; set; }
}
public enum Name { Battle1, City, Empty, Inn1 };
public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы };
public partial struct ParameterElement
{
public Bgm Bgm;
public ParameterEnum? Enum;
public long? Integer;
public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm };
public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum };
public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer };
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters =
{
NameConverter.Singleton,
ParameterElementConverter.Singleton,
ParameterEnumConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class NameConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "":
return Name.Empty;
case "Battle1":
return Name.Battle1;
case "City":
return Name.City;
case "Inn1":
return Name.Inn1;
}
throw new Exception("Cannot unmarshal type Name");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (Name)untypedValue;
switch (value)
{
case Name.Empty:
serializer.Serialize(writer, "");
return;
case Name.Battle1:
serializer.Serialize(writer, "Battle1");
return;
case Name.City:
serializer.Serialize(writer, "City");
return;
case Name.Inn1:
serializer.Serialize(writer, "Inn1");
return;
}
throw new Exception("Cannot marshal type Name");
}
public static readonly NameConverter Singleton = new NameConverter();
}
internal class ParameterElementConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.Integer:
var integerValue = serializer.Deserialize<long>(reader);
return new ParameterElement { Integer = integerValue };
case JsonToken.String:
case JsonToken.Date:
var stringValue = serializer.Deserialize<string>(reader);
switch (stringValue)
{
case "":
return new ParameterElement { Enum = ParameterEnum.Empty };
case "Actor1_8":
return new ParameterElement { Enum = ParameterEnum.Actor18 };
case "waiting-icon-gif-1":
return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 };
case "фыввфывфы":
return new ParameterElement { Enum = ParameterEnum.Фыввфывфы };
}
break;
case JsonToken.StartObject:
var objectValue = serializer.Deserialize<Bgm>(reader);
return new ParameterElement { Bgm = objectValue };
}
throw new Exception("Cannot unmarshal type ParameterElement");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
var value = (ParameterElement)untypedValue;
if (value.Integer != null)
{
serializer.Serialize(writer, value.Integer.Value);
return;
}
if (value.Enum != null)
{
switch (value.Enum)
{
case ParameterEnum.Empty:
serializer.Serialize(writer, "");
return;
case ParameterEnum.Actor18:
serializer.Serialize(writer, "Actor1_8");
return;
case ParameterEnum.WaitingIconGif1:
serializer.Serialize(writer, "waiting-icon-gif-1");
return;
case ParameterEnum.Фыввфывфы:
serializer.Serialize(writer, "фыввфывфы");
return;
}
}
if (value.Bgm != null)
{
serializer.Serialize(writer, value.Bgm);
return;
}
throw new Exception("Cannot marshal type ParameterElement");
}
public static readonly ParameterElementConverter Singleton = new ParameterElementConverter();
}
internal class ParameterEnumConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "":
return ParameterEnum.Empty;
case "Actor1_8":
return ParameterEnum.Actor18;
case "waiting-icon-gif-1":
return ParameterEnum.WaitingIconGif1;
case "фыввфывфы":
return ParameterEnum.Фыввфывфы;
}
throw new Exception("Cannot unmarshal type ParameterEnum");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (ParameterEnum)untypedValue;
switch (value)
{
case ParameterEnum.Empty:
serializer.Serialize(writer, "");
return;
case ParameterEnum.Actor18:
serializer.Serialize(writer, "Actor1_8");
return;
case ParameterEnum.WaitingIconGif1:
serializer.Serialize(writer, "waiting-icon-gif-1");
return;
case ParameterEnum.Фыввфывфы:
serializer.Serialize(writer, "фыввфывфы");
return;
}
throw new Exception("Cannot marshal type ParameterEnum");
}
public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter();
}
}
Цитата: Удаленный пользователь от 31.05.2022, 09:46Цитата: Adler от 31.05.2022, 07:20Приветствую.
Не может быть json неизвестной структуры. Его же как-то должна программа, которая его использует сериализовать / десериализовать.
[spoiler title=""]namespace QuickType{using System;using System.Collections.Generic;using System.Globalization;using Newtonsoft.Json;using Newtonsoft.Json.Converters;public partial class Temperatures{[JsonProperty("autoplayBgm")]public bool AutoplayBgm { get; set; }[JsonProperty("autoplayBgs")]public bool AutoplayBgs { get; set; }[JsonProperty("battleback1Name")]public string Battleback1Name { get; set; }[JsonProperty("battleback2Name")]public string Battleback2Name { get; set; }[JsonProperty("bgm")]public Bgm Bgm { get; set; }[JsonProperty("bgs")]public Bgm Bgs { get; set; }[JsonProperty("disableDashing")]public bool DisableDashing { get; set; }[JsonProperty("displayName")]public string DisplayName { get; set; }[JsonProperty("encounterList")]public object[] EncounterList { get; set; }[JsonProperty("encounterStep")]public long EncounterStep { get; set; }[JsonProperty("height")]public long Height { get; set; }[JsonProperty("note")]public string Note { get; set; }[JsonProperty("parallaxLoopX")]public bool ParallaxLoopX { get; set; }[JsonProperty("parallaxLoopY")]public bool ParallaxLoopY { get; set; }[JsonProperty("parallaxName")]public string ParallaxName { get; set; }[JsonProperty("parallaxShow")]public bool ParallaxShow { get; set; }[JsonProperty("parallaxSx")]public long ParallaxSx { get; set; }[JsonProperty("parallaxSy")]public long ParallaxSy { get; set; }[JsonProperty("scrollType")]public long ScrollType { get; set; }[JsonProperty("specifyBattleback")]public bool SpecifyBattleback { get; set; }[JsonProperty("tilesetId")]public long TilesetId { get; set; }[JsonProperty("width")]public long Width { get; set; }[JsonProperty("data")]public long[] Data { get; set; }[JsonProperty("events")]public Event[] Events { get; set; }}public partial class Bgm{[JsonProperty("name")]public Name Name { get; set; }[JsonProperty("pan")]public long Pan { get; set; }[JsonProperty("pitch")]public long Pitch { get; set; }[JsonProperty("volume")]public long Volume { get; set; }}public partial class Event{[JsonProperty("id")]public long Id { get; set; }[JsonProperty("name")]public string Name { get; set; }[JsonProperty("note")]public string Note { get; set; }[JsonProperty("pages")]public Page[] Pages { get; set; }[JsonProperty("x")]public long X { get; set; }[JsonProperty("y")]public long Y { get; set; }}public partial class Page{[JsonProperty("conditions")]public Conditions Conditions { get; set; }[JsonProperty("directionFix")]public bool DirectionFix { get; set; }[JsonProperty("image")]public Image Image { get; set; }[JsonProperty("list")]public PageList[] List { get; set; }[JsonProperty("moveFrequency")]public long MoveFrequency { get; set; }[JsonProperty("moveRoute")]public MoveRoute MoveRoute { get; set; }[JsonProperty("moveSpeed")]public long MoveSpeed { get; set; }[JsonProperty("moveType")]public long MoveType { get; set; }[JsonProperty("priorityType")]public long PriorityType { get; set; }[JsonProperty("stepAnime")]public bool StepAnime { get; set; }[JsonProperty("through")]public bool Through { get; set; }[JsonProperty("trigger")]public long Trigger { get; set; }[JsonProperty("walkAnime")]public bool WalkAnime { get; set; }}public partial class Conditions{[JsonProperty("actorId")]public long ActorId { get; set; }[JsonProperty("actorValid")]public bool ActorValid { get; set; }[JsonProperty("itemId")]public long ItemId { get; set; }[JsonProperty("itemValid")]public bool ItemValid { get; set; }[JsonProperty("selfSwitchCh")]public string SelfSwitchCh { get; set; }[JsonProperty("selfSwitchValid")]public bool SelfSwitchValid { get; set; }[JsonProperty("switch1Id")]public long Switch1Id { get; set; }[JsonProperty("switch1Valid")]public bool Switch1Valid { get; set; }[JsonProperty("switch2Id")]public long Switch2Id { get; set; }[JsonProperty("switch2Valid")]public bool Switch2Valid { get; set; }[JsonProperty("variableId")]public long VariableId { get; set; }[JsonProperty("variableValid")]public bool VariableValid { get; set; }[JsonProperty("variableValue")]public long VariableValue { get; set; }}public partial class Image{[JsonProperty("characterIndex")]public long CharacterIndex { get; set; }[JsonProperty("characterName")]public string CharacterName { get; set; }[JsonProperty("direction")]public long Direction { get; set; }[JsonProperty("pattern")]public long Pattern { get; set; }[JsonProperty("tileId")]public long TileId { get; set; }}public partial class PageList{[JsonProperty("code")]public long Code { get; set; }[JsonProperty("indent")]public long Indent { get; set; }[JsonProperty("parameters")]public ParameterElement[] Parameters { get; set; }}public partial class MoveRoute{[JsonProperty("list")]public MoveRouteList[] List { get; set; }[JsonProperty("repeat")]public bool Repeat { get; set; }[JsonProperty("skippable")]public bool Skippable { get; set; }[JsonProperty("wait")]public bool Wait { get; set; }}public partial class MoveRouteList{[JsonProperty("code")]public long Code { get; set; }[JsonProperty("parameters")]public object[] Parameters { get; set; }}public enum Name { Battle1, City, Empty, Inn1 };public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы };public partial struct ParameterElement{public Bgm Bgm;public ParameterEnum? Enum;public long? Integer;public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm };public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum };public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer };}internal static class Converter{public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings{MetadataPropertyHandling = MetadataPropertyHandling.Ignore,DateParseHandling = DateParseHandling.None,Converters ={NameConverter.Singleton,ParameterElementConverter.Singleton,ParameterEnumConverter.Singleton,new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }},};}internal class NameConverter : JsonConverter{public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?);public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer){if (reader.TokenType == JsonToken.Null) return null;var value = serializer.Deserialize<string>(reader);switch (value){case "":return Name.Empty;case "Battle1":return Name.Battle1;case "City":return Name.City;case "Inn1":return Name.Inn1;}throw new Exception("Cannot unmarshal type Name");}public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer){if (untypedValue == null){serializer.Serialize(writer, null);return;}var value = (Name)untypedValue;switch (value){case Name.Empty:serializer.Serialize(writer, "");return;case Name.Battle1:serializer.Serialize(writer, "Battle1");return;case Name.City:serializer.Serialize(writer, "City");return;case Name.Inn1:serializer.Serialize(writer, "Inn1");return;}throw new Exception("Cannot marshal type Name");}public static readonly NameConverter Singleton = new NameConverter();}internal class ParameterElementConverter : JsonConverter{public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?);public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer){switch (reader.TokenType){case JsonToken.Integer:var integerValue = serializer.Deserialize<long>(reader);return new ParameterElement { Integer = integerValue };case JsonToken.String:case JsonToken.Date:var stringValue = serializer.Deserialize<string>(reader);switch (stringValue){case "":return new ParameterElement { Enum = ParameterEnum.Empty };case "Actor1_8":return new ParameterElement { Enum = ParameterEnum.Actor18 };case "waiting-icon-gif-1":return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 };case "фыввфывфы":return new ParameterElement { Enum = ParameterEnum.Фыввфывфы };}break;case JsonToken.StartObject:var objectValue = serializer.Deserialize<Bgm>(reader);return new ParameterElement { Bgm = objectValue };}throw new Exception("Cannot unmarshal type ParameterElement");}public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer){var value = (ParameterElement)untypedValue;if (value.Integer != null){serializer.Serialize(writer, value.Integer.Value);return;}if (value.Enum != null){switch (value.Enum){case ParameterEnum.Empty:serializer.Serialize(writer, "");return;case ParameterEnum.Actor18:serializer.Serialize(writer, "Actor1_8");return;case ParameterEnum.WaitingIconGif1:serializer.Serialize(writer, "waiting-icon-gif-1");return;case ParameterEnum.Фыввфывфы:serializer.Serialize(writer, "фыввфывфы");return;}}if (value.Bgm != null){serializer.Serialize(writer, value.Bgm);return;}throw new Exception("Cannot marshal type ParameterElement");}public static readonly ParameterElementConverter Singleton = new ParameterElementConverter();}internal class ParameterEnumConverter : JsonConverter{public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?);public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer){if (reader.TokenType == JsonToken.Null) return null;var value = serializer.Deserialize<string>(reader);switch (value){case "":return ParameterEnum.Empty;case "Actor1_8":return ParameterEnum.Actor18;case "waiting-icon-gif-1":return ParameterEnum.WaitingIconGif1;case "фыввфывфы":return ParameterEnum.Фыввфывфы;}throw new Exception("Cannot unmarshal type ParameterEnum");}public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer){if (untypedValue == null){serializer.Serialize(writer, null);return;}var value = (ParameterEnum)untypedValue;switch (value){case ParameterEnum.Empty:serializer.Serialize(writer, "");return;case ParameterEnum.Actor18:serializer.Serialize(writer, "Actor1_8");return;case ParameterEnum.WaitingIconGif1:serializer.Serialize(writer, "waiting-icon-gif-1");return;case ParameterEnum.Фыввфывфы:serializer.Serialize(writer, "фыввфывфы");return;}throw new Exception("Cannot marshal type ParameterEnum");}public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter();}}namespace QuickType { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Temperatures { [JsonProperty("autoplayBgm")] public bool AutoplayBgm { get; set; } [JsonProperty("autoplayBgs")] public bool AutoplayBgs { get; set; } [JsonProperty("battleback1Name")] public string Battleback1Name { get; set; } [JsonProperty("battleback2Name")] public string Battleback2Name { get; set; } [JsonProperty("bgm")] public Bgm Bgm { get; set; } [JsonProperty("bgs")] public Bgm Bgs { get; set; } [JsonProperty("disableDashing")] public bool DisableDashing { get; set; } [JsonProperty("displayName")] public string DisplayName { get; set; } [JsonProperty("encounterList")] public object[] EncounterList { get; set; } [JsonProperty("encounterStep")] public long EncounterStep { get; set; } [JsonProperty("height")] public long Height { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("parallaxLoopX")] public bool ParallaxLoopX { get; set; } [JsonProperty("parallaxLoopY")] public bool ParallaxLoopY { get; set; } [JsonProperty("parallaxName")] public string ParallaxName { get; set; } [JsonProperty("parallaxShow")] public bool ParallaxShow { get; set; } [JsonProperty("parallaxSx")] public long ParallaxSx { get; set; } [JsonProperty("parallaxSy")] public long ParallaxSy { get; set; } [JsonProperty("scrollType")] public long ScrollType { get; set; } [JsonProperty("specifyBattleback")] public bool SpecifyBattleback { get; set; } [JsonProperty("tilesetId")] public long TilesetId { get; set; } [JsonProperty("width")] public long Width { get; set; } [JsonProperty("data")] public long[] Data { get; set; } [JsonProperty("events")] public Event[] Events { get; set; } } public partial class Bgm { [JsonProperty("name")] public Name Name { get; set; } [JsonProperty("pan")] public long Pan { get; set; } [JsonProperty("pitch")] public long Pitch { get; set; } [JsonProperty("volume")] public long Volume { get; set; } } public partial class Event { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("pages")] public Page[] Pages { get; set; } [JsonProperty("x")] public long X { get; set; } [JsonProperty("y")] public long Y { get; set; } } public partial class Page { [JsonProperty("conditions")] public Conditions Conditions { get; set; } [JsonProperty("directionFix")] public bool DirectionFix { get; set; } [JsonProperty("image")] public Image Image { get; set; } [JsonProperty("list")] public PageList[] List { get; set; } [JsonProperty("moveFrequency")] public long MoveFrequency { get; set; } [JsonProperty("moveRoute")] public MoveRoute MoveRoute { get; set; } [JsonProperty("moveSpeed")] public long MoveSpeed { get; set; } [JsonProperty("moveType")] public long MoveType { get; set; } [JsonProperty("priorityType")] public long PriorityType { get; set; } [JsonProperty("stepAnime")] public bool StepAnime { get; set; } [JsonProperty("through")] public bool Through { get; set; } [JsonProperty("trigger")] public long Trigger { get; set; } [JsonProperty("walkAnime")] public bool WalkAnime { get; set; } } public partial class Conditions { [JsonProperty("actorId")] public long ActorId { get; set; } [JsonProperty("actorValid")] public bool ActorValid { get; set; } [JsonProperty("itemId")] public long ItemId { get; set; } [JsonProperty("itemValid")] public bool ItemValid { get; set; } [JsonProperty("selfSwitchCh")] public string SelfSwitchCh { get; set; } [JsonProperty("selfSwitchValid")] public bool SelfSwitchValid { get; set; } [JsonProperty("switch1Id")] public long Switch1Id { get; set; } [JsonProperty("switch1Valid")] public bool Switch1Valid { get; set; } [JsonProperty("switch2Id")] public long Switch2Id { get; set; } [JsonProperty("switch2Valid")] public bool Switch2Valid { get; set; } [JsonProperty("variableId")] public long VariableId { get; set; } [JsonProperty("variableValid")] public bool VariableValid { get; set; } [JsonProperty("variableValue")] public long VariableValue { get; set; } } public partial class Image { [JsonProperty("characterIndex")] public long CharacterIndex { get; set; } [JsonProperty("characterName")] public string CharacterName { get; set; } [JsonProperty("direction")] public long Direction { get; set; } [JsonProperty("pattern")] public long Pattern { get; set; } [JsonProperty("tileId")] public long TileId { get; set; } } public partial class PageList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("indent")] public long Indent { get; set; } [JsonProperty("parameters")] public ParameterElement[] Parameters { get; set; } } public partial class MoveRoute { [JsonProperty("list")] public MoveRouteList[] List { get; set; } [JsonProperty("repeat")] public bool Repeat { get; set; } [JsonProperty("skippable")] public bool Skippable { get; set; } [JsonProperty("wait")] public bool Wait { get; set; } } public partial class MoveRouteList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("parameters")] public object[] Parameters { get; set; } } public enum Name { Battle1, City, Empty, Inn1 }; public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы }; public partial struct ParameterElement { public Bgm Bgm; public ParameterEnum? Enum; public long? Integer; public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm }; public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum }; public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer }; } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { NameConverter.Singleton, ParameterElementConverter.Singleton, ParameterEnumConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class NameConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return Name.Empty; case "Battle1": return Name.Battle1; case "City": return Name.City; case "Inn1": return Name.Inn1; } throw new Exception("Cannot unmarshal type Name"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (Name)untypedValue; switch (value) { case Name.Empty: serializer.Serialize(writer, ""); return; case Name.Battle1: serializer.Serialize(writer, "Battle1"); return; case Name.City: serializer.Serialize(writer, "City"); return; case Name.Inn1: serializer.Serialize(writer, "Inn1"); return; } throw new Exception("Cannot marshal type Name"); } public static readonly NameConverter Singleton = new NameConverter(); } internal class ParameterElementConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { switch (reader.TokenType) { case JsonToken.Integer: var integerValue = serializer.Deserialize<long>(reader); return new ParameterElement { Integer = integerValue }; case JsonToken.String: case JsonToken.Date: var stringValue = serializer.Deserialize<string>(reader); switch (stringValue) { case "": return new ParameterElement { Enum = ParameterEnum.Empty }; case "Actor1_8": return new ParameterElement { Enum = ParameterEnum.Actor18 }; case "waiting-icon-gif-1": return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 }; case "фыввфывфы": return new ParameterElement { Enum = ParameterEnum.Фыввфывфы }; } break; case JsonToken.StartObject: var objectValue = serializer.Deserialize<Bgm>(reader); return new ParameterElement { Bgm = objectValue }; } throw new Exception("Cannot unmarshal type ParameterElement"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { var value = (ParameterElement)untypedValue; if (value.Integer != null) { serializer.Serialize(writer, value.Integer.Value); return; } if (value.Enum != null) { switch (value.Enum) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } } if (value.Bgm != null) { serializer.Serialize(writer, value.Bgm); return; } throw new Exception("Cannot marshal type ParameterElement"); } public static readonly ParameterElementConverter Singleton = new ParameterElementConverter(); } internal class ParameterEnumConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return ParameterEnum.Empty; case "Actor1_8": return ParameterEnum.Actor18; case "waiting-icon-gif-1": return ParameterEnum.WaitingIconGif1; case "фыввфывфы": return ParameterEnum.Фыввфывфы; } throw new Exception("Cannot unmarshal type ParameterEnum"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (ParameterEnum)untypedValue; switch (value) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } throw new Exception("Cannot marshal type ParameterEnum"); } public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter(); } }namespace QuickType { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Temperatures { [JsonProperty("autoplayBgm")] public bool AutoplayBgm { get; set; } [JsonProperty("autoplayBgs")] public bool AutoplayBgs { get; set; } [JsonProperty("battleback1Name")] public string Battleback1Name { get; set; } [JsonProperty("battleback2Name")] public string Battleback2Name { get; set; } [JsonProperty("bgm")] public Bgm Bgm { get; set; } [JsonProperty("bgs")] public Bgm Bgs { get; set; } [JsonProperty("disableDashing")] public bool DisableDashing { get; set; } [JsonProperty("displayName")] public string DisplayName { get; set; } [JsonProperty("encounterList")] public object[] EncounterList { get; set; } [JsonProperty("encounterStep")] public long EncounterStep { get; set; } [JsonProperty("height")] public long Height { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("parallaxLoopX")] public bool ParallaxLoopX { get; set; } [JsonProperty("parallaxLoopY")] public bool ParallaxLoopY { get; set; } [JsonProperty("parallaxName")] public string ParallaxName { get; set; } [JsonProperty("parallaxShow")] public bool ParallaxShow { get; set; } [JsonProperty("parallaxSx")] public long ParallaxSx { get; set; } [JsonProperty("parallaxSy")] public long ParallaxSy { get; set; } [JsonProperty("scrollType")] public long ScrollType { get; set; } [JsonProperty("specifyBattleback")] public bool SpecifyBattleback { get; set; } [JsonProperty("tilesetId")] public long TilesetId { get; set; } [JsonProperty("width")] public long Width { get; set; } [JsonProperty("data")] public long[] Data { get; set; } [JsonProperty("events")] public Event[] Events { get; set; } } public partial class Bgm { [JsonProperty("name")] public Name Name { get; set; } [JsonProperty("pan")] public long Pan { get; set; } [JsonProperty("pitch")] public long Pitch { get; set; } [JsonProperty("volume")] public long Volume { get; set; } } public partial class Event { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("pages")] public Page[] Pages { get; set; } [JsonProperty("x")] public long X { get; set; } [JsonProperty("y")] public long Y { get; set; } } public partial class Page { [JsonProperty("conditions")] public Conditions Conditions { get; set; } [JsonProperty("directionFix")] public bool DirectionFix { get; set; } [JsonProperty("image")] public Image Image { get; set; } [JsonProperty("list")] public PageList[] List { get; set; } [JsonProperty("moveFrequency")] public long MoveFrequency { get; set; } [JsonProperty("moveRoute")] public MoveRoute MoveRoute { get; set; } [JsonProperty("moveSpeed")] public long MoveSpeed { get; set; } [JsonProperty("moveType")] public long MoveType { get; set; } [JsonProperty("priorityType")] public long PriorityType { get; set; } [JsonProperty("stepAnime")] public bool StepAnime { get; set; } [JsonProperty("through")] public bool Through { get; set; } [JsonProperty("trigger")] public long Trigger { get; set; } [JsonProperty("walkAnime")] public bool WalkAnime { get; set; } } public partial class Conditions { [JsonProperty("actorId")] public long ActorId { get; set; } [JsonProperty("actorValid")] public bool ActorValid { get; set; } [JsonProperty("itemId")] public long ItemId { get; set; } [JsonProperty("itemValid")] public bool ItemValid { get; set; } [JsonProperty("selfSwitchCh")] public string SelfSwitchCh { get; set; } [JsonProperty("selfSwitchValid")] public bool SelfSwitchValid { get; set; } [JsonProperty("switch1Id")] public long Switch1Id { get; set; } [JsonProperty("switch1Valid")] public bool Switch1Valid { get; set; } [JsonProperty("switch2Id")] public long Switch2Id { get; set; } [JsonProperty("switch2Valid")] public bool Switch2Valid { get; set; } [JsonProperty("variableId")] public long VariableId { get; set; } [JsonProperty("variableValid")] public bool VariableValid { get; set; } [JsonProperty("variableValue")] public long VariableValue { get; set; } } public partial class Image { [JsonProperty("characterIndex")] public long CharacterIndex { get; set; } [JsonProperty("characterName")] public string CharacterName { get; set; } [JsonProperty("direction")] public long Direction { get; set; } [JsonProperty("pattern")] public long Pattern { get; set; } [JsonProperty("tileId")] public long TileId { get; set; } } public partial class PageList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("indent")] public long Indent { get; set; } [JsonProperty("parameters")] public ParameterElement[] Parameters { get; set; } } public partial class MoveRoute { [JsonProperty("list")] public MoveRouteList[] List { get; set; } [JsonProperty("repeat")] public bool Repeat { get; set; } [JsonProperty("skippable")] public bool Skippable { get; set; } [JsonProperty("wait")] public bool Wait { get; set; } } public partial class MoveRouteList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("parameters")] public object[] Parameters { get; set; } } public enum Name { Battle1, City, Empty, Inn1 }; public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы }; public partial struct ParameterElement { public Bgm Bgm; public ParameterEnum? Enum; public long? Integer; public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm }; public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum }; public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer }; } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { NameConverter.Singleton, ParameterElementConverter.Singleton, ParameterEnumConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class NameConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return Name.Empty; case "Battle1": return Name.Battle1; case "City": return Name.City; case "Inn1": return Name.Inn1; } throw new Exception("Cannot unmarshal type Name"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (Name)untypedValue; switch (value) { case Name.Empty: serializer.Serialize(writer, ""); return; case Name.Battle1: serializer.Serialize(writer, "Battle1"); return; case Name.City: serializer.Serialize(writer, "City"); return; case Name.Inn1: serializer.Serialize(writer, "Inn1"); return; } throw new Exception("Cannot marshal type Name"); } public static readonly NameConverter Singleton = new NameConverter(); } internal class ParameterElementConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { switch (reader.TokenType) { case JsonToken.Integer: var integerValue = serializer.Deserialize<long>(reader); return new ParameterElement { Integer = integerValue }; case JsonToken.String: case JsonToken.Date: var stringValue = serializer.Deserialize<string>(reader); switch (stringValue) { case "": return new ParameterElement { Enum = ParameterEnum.Empty }; case "Actor1_8": return new ParameterElement { Enum = ParameterEnum.Actor18 }; case "waiting-icon-gif-1": return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 }; case "фыввфывфы": return new ParameterElement { Enum = ParameterEnum.Фыввфывфы }; } break; case JsonToken.StartObject: var objectValue = serializer.Deserialize<Bgm>(reader); return new ParameterElement { Bgm = objectValue }; } throw new Exception("Cannot unmarshal type ParameterElement"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { var value = (ParameterElement)untypedValue; if (value.Integer != null) { serializer.Serialize(writer, value.Integer.Value); return; } if (value.Enum != null) { switch (value.Enum) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } } if (value.Bgm != null) { serializer.Serialize(writer, value.Bgm); return; } throw new Exception("Cannot marshal type ParameterElement"); } public static readonly ParameterElementConverter Singleton = new ParameterElementConverter(); } internal class ParameterEnumConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return ParameterEnum.Empty; case "Actor1_8": return ParameterEnum.Actor18; case "waiting-icon-gif-1": return ParameterEnum.WaitingIconGif1; case "фыввфывфы": return ParameterEnum.Фыввфывфы; } throw new Exception("Cannot unmarshal type ParameterEnum"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (ParameterEnum)untypedValue; switch (value) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } throw new Exception("Cannot marshal type ParameterEnum"); } public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter(); } }[/spoiler]
Мне неизвестна структура. Разработчикам та известна. В принципе сконвентировав 2 структуры 2х json (1 который для примера скопировал другой у моего проекта) получил 2 одинаковые структуры. Но это не отменяет того факта что кое какие поля могут быть неизвестны а работать нужно исключительно с событиями (events)
Цитата: Adler от 31.05.2022, 07:20Приветствую.
Не может быть json неизвестной структуры. Его же как-то должна программа, которая его использует сериализовать / десериализовать.
Спойлерnamespace QuickType{using System;using System.Collections.Generic;using System.Globalization;using Newtonsoft.Json;using Newtonsoft.Json.Converters;public partial class Temperatures{[JsonProperty("autoplayBgm")]public bool AutoplayBgm { get; set; }[JsonProperty("autoplayBgs")]public bool AutoplayBgs { get; set; }[JsonProperty("battleback1Name")]public string Battleback1Name { get; set; }[JsonProperty("battleback2Name")]public string Battleback2Name { get; set; }[JsonProperty("bgm")]public Bgm Bgm { get; set; }[JsonProperty("bgs")]public Bgm Bgs { get; set; }[JsonProperty("disableDashing")]public bool DisableDashing { get; set; }[JsonProperty("displayName")]public string DisplayName { get; set; }[JsonProperty("encounterList")]public object[] EncounterList { get; set; }[JsonProperty("encounterStep")]public long EncounterStep { get; set; }[JsonProperty("height")]public long Height { get; set; }[JsonProperty("note")]public string Note { get; set; }[JsonProperty("parallaxLoopX")]public bool ParallaxLoopX { get; set; }[JsonProperty("parallaxLoopY")]public bool ParallaxLoopY { get; set; }[JsonProperty("parallaxName")]public string ParallaxName { get; set; }[JsonProperty("parallaxShow")]public bool ParallaxShow { get; set; }[JsonProperty("parallaxSx")]public long ParallaxSx { get; set; }[JsonProperty("parallaxSy")]public long ParallaxSy { get; set; }[JsonProperty("scrollType")]public long ScrollType { get; set; }[JsonProperty("specifyBattleback")]public bool SpecifyBattleback { get; set; }[JsonProperty("tilesetId")]public long TilesetId { get; set; }[JsonProperty("width")]public long Width { get; set; }[JsonProperty("data")]public long[] Data { get; set; }[JsonProperty("events")]public Event[] Events { get; set; }}public partial class Bgm{[JsonProperty("name")]public Name Name { get; set; }[JsonProperty("pan")]public long Pan { get; set; }[JsonProperty("pitch")]public long Pitch { get; set; }[JsonProperty("volume")]public long Volume { get; set; }}public partial class Event{[JsonProperty("id")]public long Id { get; set; }[JsonProperty("name")]public string Name { get; set; }[JsonProperty("note")]public string Note { get; set; }[JsonProperty("pages")]public Page[] Pages { get; set; }[JsonProperty("x")]public long X { get; set; }[JsonProperty("y")]public long Y { get; set; }}public partial class Page{[JsonProperty("conditions")]public Conditions Conditions { get; set; }[JsonProperty("directionFix")]public bool DirectionFix { get; set; }[JsonProperty("image")]public Image Image { get; set; }[JsonProperty("list")]public PageList[] List { get; set; }[JsonProperty("moveFrequency")]public long MoveFrequency { get; set; }[JsonProperty("moveRoute")]public MoveRoute MoveRoute { get; set; }[JsonProperty("moveSpeed")]public long MoveSpeed { get; set; }[JsonProperty("moveType")]public long MoveType { get; set; }[JsonProperty("priorityType")]public long PriorityType { get; set; }[JsonProperty("stepAnime")]public bool StepAnime { get; set; }[JsonProperty("through")]public bool Through { get; set; }[JsonProperty("trigger")]public long Trigger { get; set; }[JsonProperty("walkAnime")]public bool WalkAnime { get; set; }}public partial class Conditions{[JsonProperty("actorId")]public long ActorId { get; set; }[JsonProperty("actorValid")]public bool ActorValid { get; set; }[JsonProperty("itemId")]public long ItemId { get; set; }[JsonProperty("itemValid")]public bool ItemValid { get; set; }[JsonProperty("selfSwitchCh")]public string SelfSwitchCh { get; set; }[JsonProperty("selfSwitchValid")]public bool SelfSwitchValid { get; set; }[JsonProperty("switch1Id")]public long Switch1Id { get; set; }[JsonProperty("switch1Valid")]public bool Switch1Valid { get; set; }[JsonProperty("switch2Id")]public long Switch2Id { get; set; }[JsonProperty("switch2Valid")]public bool Switch2Valid { get; set; }[JsonProperty("variableId")]public long VariableId { get; set; }[JsonProperty("variableValid")]public bool VariableValid { get; set; }[JsonProperty("variableValue")]public long VariableValue { get; set; }}public partial class Image{[JsonProperty("characterIndex")]public long CharacterIndex { get; set; }[JsonProperty("characterName")]public string CharacterName { get; set; }[JsonProperty("direction")]public long Direction { get; set; }[JsonProperty("pattern")]public long Pattern { get; set; }[JsonProperty("tileId")]public long TileId { get; set; }}public partial class PageList{[JsonProperty("code")]public long Code { get; set; }[JsonProperty("indent")]public long Indent { get; set; }[JsonProperty("parameters")]public ParameterElement[] Parameters { get; set; }}public partial class MoveRoute{[JsonProperty("list")]public MoveRouteList[] List { get; set; }[JsonProperty("repeat")]public bool Repeat { get; set; }[JsonProperty("skippable")]public bool Skippable { get; set; }[JsonProperty("wait")]public bool Wait { get; set; }}public partial class MoveRouteList{[JsonProperty("code")]public long Code { get; set; }[JsonProperty("parameters")]public object[] Parameters { get; set; }}public enum Name { Battle1, City, Empty, Inn1 };public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы };public partial struct ParameterElement{public Bgm Bgm;public ParameterEnum? Enum;public long? Integer;public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm };public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum };public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer };}internal static class Converter{public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings{MetadataPropertyHandling = MetadataPropertyHandling.Ignore,DateParseHandling = DateParseHandling.None,Converters ={NameConverter.Singleton,ParameterElementConverter.Singleton,ParameterEnumConverter.Singleton,new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }},};}internal class NameConverter : JsonConverter{public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?);public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer){if (reader.TokenType == JsonToken.Null) return null;var value = serializer.Deserialize<string>(reader);switch (value){case "":return Name.Empty;case "Battle1":return Name.Battle1;case "City":return Name.City;case "Inn1":return Name.Inn1;}throw new Exception("Cannot unmarshal type Name");}public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer){if (untypedValue == null){serializer.Serialize(writer, null);return;}var value = (Name)untypedValue;switch (value){case Name.Empty:serializer.Serialize(writer, "");return;case Name.Battle1:serializer.Serialize(writer, "Battle1");return;case Name.City:serializer.Serialize(writer, "City");return;case Name.Inn1:serializer.Serialize(writer, "Inn1");return;}throw new Exception("Cannot marshal type Name");}public static readonly NameConverter Singleton = new NameConverter();}internal class ParameterElementConverter : JsonConverter{public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?);public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer){switch (reader.TokenType){case JsonToken.Integer:var integerValue = serializer.Deserialize<long>(reader);return new ParameterElement { Integer = integerValue };case JsonToken.String:case JsonToken.Date:var stringValue = serializer.Deserialize<string>(reader);switch (stringValue){case "":return new ParameterElement { Enum = ParameterEnum.Empty };case "Actor1_8":return new ParameterElement { Enum = ParameterEnum.Actor18 };case "waiting-icon-gif-1":return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 };case "фыввфывфы":return new ParameterElement { Enum = ParameterEnum.Фыввфывфы };}break;case JsonToken.StartObject:var objectValue = serializer.Deserialize<Bgm>(reader);return new ParameterElement { Bgm = objectValue };}throw new Exception("Cannot unmarshal type ParameterElement");}public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer){var value = (ParameterElement)untypedValue;if (value.Integer != null){serializer.Serialize(writer, value.Integer.Value);return;}if (value.Enum != null){switch (value.Enum){case ParameterEnum.Empty:serializer.Serialize(writer, "");return;case ParameterEnum.Actor18:serializer.Serialize(writer, "Actor1_8");return;case ParameterEnum.WaitingIconGif1:serializer.Serialize(writer, "waiting-icon-gif-1");return;case ParameterEnum.Фыввфывфы:serializer.Serialize(writer, "фыввфывфы");return;}}if (value.Bgm != null){serializer.Serialize(writer, value.Bgm);return;}throw new Exception("Cannot marshal type ParameterElement");}public static readonly ParameterElementConverter Singleton = new ParameterElementConverter();}internal class ParameterEnumConverter : JsonConverter{public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?);public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer){if (reader.TokenType == JsonToken.Null) return null;var value = serializer.Deserialize<string>(reader);switch (value){case "":return ParameterEnum.Empty;case "Actor1_8":return ParameterEnum.Actor18;case "waiting-icon-gif-1":return ParameterEnum.WaitingIconGif1;case "фыввфывфы":return ParameterEnum.Фыввфывфы;}throw new Exception("Cannot unmarshal type ParameterEnum");}public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer){if (untypedValue == null){serializer.Serialize(writer, null);return;}var value = (ParameterEnum)untypedValue;switch (value){case ParameterEnum.Empty:serializer.Serialize(writer, "");return;case ParameterEnum.Actor18:serializer.Serialize(writer, "Actor1_8");return;case ParameterEnum.WaitingIconGif1:serializer.Serialize(writer, "waiting-icon-gif-1");return;case ParameterEnum.Фыввфывфы:serializer.Serialize(writer, "фыввфывфы");return;}throw new Exception("Cannot marshal type ParameterEnum");}public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter();}}namespace QuickType { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Temperatures { [JsonProperty("autoplayBgm")] public bool AutoplayBgm { get; set; } [JsonProperty("autoplayBgs")] public bool AutoplayBgs { get; set; } [JsonProperty("battleback1Name")] public string Battleback1Name { get; set; } [JsonProperty("battleback2Name")] public string Battleback2Name { get; set; } [JsonProperty("bgm")] public Bgm Bgm { get; set; } [JsonProperty("bgs")] public Bgm Bgs { get; set; } [JsonProperty("disableDashing")] public bool DisableDashing { get; set; } [JsonProperty("displayName")] public string DisplayName { get; set; } [JsonProperty("encounterList")] public object[] EncounterList { get; set; } [JsonProperty("encounterStep")] public long EncounterStep { get; set; } [JsonProperty("height")] public long Height { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("parallaxLoopX")] public bool ParallaxLoopX { get; set; } [JsonProperty("parallaxLoopY")] public bool ParallaxLoopY { get; set; } [JsonProperty("parallaxName")] public string ParallaxName { get; set; } [JsonProperty("parallaxShow")] public bool ParallaxShow { get; set; } [JsonProperty("parallaxSx")] public long ParallaxSx { get; set; } [JsonProperty("parallaxSy")] public long ParallaxSy { get; set; } [JsonProperty("scrollType")] public long ScrollType { get; set; } [JsonProperty("specifyBattleback")] public bool SpecifyBattleback { get; set; } [JsonProperty("tilesetId")] public long TilesetId { get; set; } [JsonProperty("width")] public long Width { get; set; } [JsonProperty("data")] public long[] Data { get; set; } [JsonProperty("events")] public Event[] Events { get; set; } } public partial class Bgm { [JsonProperty("name")] public Name Name { get; set; } [JsonProperty("pan")] public long Pan { get; set; } [JsonProperty("pitch")] public long Pitch { get; set; } [JsonProperty("volume")] public long Volume { get; set; } } public partial class Event { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("pages")] public Page[] Pages { get; set; } [JsonProperty("x")] public long X { get; set; } [JsonProperty("y")] public long Y { get; set; } } public partial class Page { [JsonProperty("conditions")] public Conditions Conditions { get; set; } [JsonProperty("directionFix")] public bool DirectionFix { get; set; } [JsonProperty("image")] public Image Image { get; set; } [JsonProperty("list")] public PageList[] List { get; set; } [JsonProperty("moveFrequency")] public long MoveFrequency { get; set; } [JsonProperty("moveRoute")] public MoveRoute MoveRoute { get; set; } [JsonProperty("moveSpeed")] public long MoveSpeed { get; set; } [JsonProperty("moveType")] public long MoveType { get; set; } [JsonProperty("priorityType")] public long PriorityType { get; set; } [JsonProperty("stepAnime")] public bool StepAnime { get; set; } [JsonProperty("through")] public bool Through { get; set; } [JsonProperty("trigger")] public long Trigger { get; set; } [JsonProperty("walkAnime")] public bool WalkAnime { get; set; } } public partial class Conditions { [JsonProperty("actorId")] public long ActorId { get; set; } [JsonProperty("actorValid")] public bool ActorValid { get; set; } [JsonProperty("itemId")] public long ItemId { get; set; } [JsonProperty("itemValid")] public bool ItemValid { get; set; } [JsonProperty("selfSwitchCh")] public string SelfSwitchCh { get; set; } [JsonProperty("selfSwitchValid")] public bool SelfSwitchValid { get; set; } [JsonProperty("switch1Id")] public long Switch1Id { get; set; } [JsonProperty("switch1Valid")] public bool Switch1Valid { get; set; } [JsonProperty("switch2Id")] public long Switch2Id { get; set; } [JsonProperty("switch2Valid")] public bool Switch2Valid { get; set; } [JsonProperty("variableId")] public long VariableId { get; set; } [JsonProperty("variableValid")] public bool VariableValid { get; set; } [JsonProperty("variableValue")] public long VariableValue { get; set; } } public partial class Image { [JsonProperty("characterIndex")] public long CharacterIndex { get; set; } [JsonProperty("characterName")] public string CharacterName { get; set; } [JsonProperty("direction")] public long Direction { get; set; } [JsonProperty("pattern")] public long Pattern { get; set; } [JsonProperty("tileId")] public long TileId { get; set; } } public partial class PageList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("indent")] public long Indent { get; set; } [JsonProperty("parameters")] public ParameterElement[] Parameters { get; set; } } public partial class MoveRoute { [JsonProperty("list")] public MoveRouteList[] List { get; set; } [JsonProperty("repeat")] public bool Repeat { get; set; } [JsonProperty("skippable")] public bool Skippable { get; set; } [JsonProperty("wait")] public bool Wait { get; set; } } public partial class MoveRouteList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("parameters")] public object[] Parameters { get; set; } } public enum Name { Battle1, City, Empty, Inn1 }; public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы }; public partial struct ParameterElement { public Bgm Bgm; public ParameterEnum? Enum; public long? Integer; public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm }; public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum }; public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer }; } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { NameConverter.Singleton, ParameterElementConverter.Singleton, ParameterEnumConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class NameConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return Name.Empty; case "Battle1": return Name.Battle1; case "City": return Name.City; case "Inn1": return Name.Inn1; } throw new Exception("Cannot unmarshal type Name"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (Name)untypedValue; switch (value) { case Name.Empty: serializer.Serialize(writer, ""); return; case Name.Battle1: serializer.Serialize(writer, "Battle1"); return; case Name.City: serializer.Serialize(writer, "City"); return; case Name.Inn1: serializer.Serialize(writer, "Inn1"); return; } throw new Exception("Cannot marshal type Name"); } public static readonly NameConverter Singleton = new NameConverter(); } internal class ParameterElementConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { switch (reader.TokenType) { case JsonToken.Integer: var integerValue = serializer.Deserialize<long>(reader); return new ParameterElement { Integer = integerValue }; case JsonToken.String: case JsonToken.Date: var stringValue = serializer.Deserialize<string>(reader); switch (stringValue) { case "": return new ParameterElement { Enum = ParameterEnum.Empty }; case "Actor1_8": return new ParameterElement { Enum = ParameterEnum.Actor18 }; case "waiting-icon-gif-1": return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 }; case "фыввфывфы": return new ParameterElement { Enum = ParameterEnum.Фыввфывфы }; } break; case JsonToken.StartObject: var objectValue = serializer.Deserialize<Bgm>(reader); return new ParameterElement { Bgm = objectValue }; } throw new Exception("Cannot unmarshal type ParameterElement"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { var value = (ParameterElement)untypedValue; if (value.Integer != null) { serializer.Serialize(writer, value.Integer.Value); return; } if (value.Enum != null) { switch (value.Enum) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } } if (value.Bgm != null) { serializer.Serialize(writer, value.Bgm); return; } throw new Exception("Cannot marshal type ParameterElement"); } public static readonly ParameterElementConverter Singleton = new ParameterElementConverter(); } internal class ParameterEnumConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return ParameterEnum.Empty; case "Actor1_8": return ParameterEnum.Actor18; case "waiting-icon-gif-1": return ParameterEnum.WaitingIconGif1; case "фыввфывфы": return ParameterEnum.Фыввфывфы; } throw new Exception("Cannot unmarshal type ParameterEnum"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (ParameterEnum)untypedValue; switch (value) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } throw new Exception("Cannot marshal type ParameterEnum"); } public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter(); } }namespace QuickType { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Temperatures { [JsonProperty("autoplayBgm")] public bool AutoplayBgm { get; set; } [JsonProperty("autoplayBgs")] public bool AutoplayBgs { get; set; } [JsonProperty("battleback1Name")] public string Battleback1Name { get; set; } [JsonProperty("battleback2Name")] public string Battleback2Name { get; set; } [JsonProperty("bgm")] public Bgm Bgm { get; set; } [JsonProperty("bgs")] public Bgm Bgs { get; set; } [JsonProperty("disableDashing")] public bool DisableDashing { get; set; } [JsonProperty("displayName")] public string DisplayName { get; set; } [JsonProperty("encounterList")] public object[] EncounterList { get; set; } [JsonProperty("encounterStep")] public long EncounterStep { get; set; } [JsonProperty("height")] public long Height { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("parallaxLoopX")] public bool ParallaxLoopX { get; set; } [JsonProperty("parallaxLoopY")] public bool ParallaxLoopY { get; set; } [JsonProperty("parallaxName")] public string ParallaxName { get; set; } [JsonProperty("parallaxShow")] public bool ParallaxShow { get; set; } [JsonProperty("parallaxSx")] public long ParallaxSx { get; set; } [JsonProperty("parallaxSy")] public long ParallaxSy { get; set; } [JsonProperty("scrollType")] public long ScrollType { get; set; } [JsonProperty("specifyBattleback")] public bool SpecifyBattleback { get; set; } [JsonProperty("tilesetId")] public long TilesetId { get; set; } [JsonProperty("width")] public long Width { get; set; } [JsonProperty("data")] public long[] Data { get; set; } [JsonProperty("events")] public Event[] Events { get; set; } } public partial class Bgm { [JsonProperty("name")] public Name Name { get; set; } [JsonProperty("pan")] public long Pan { get; set; } [JsonProperty("pitch")] public long Pitch { get; set; } [JsonProperty("volume")] public long Volume { get; set; } } public partial class Event { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("note")] public string Note { get; set; } [JsonProperty("pages")] public Page[] Pages { get; set; } [JsonProperty("x")] public long X { get; set; } [JsonProperty("y")] public long Y { get; set; } } public partial class Page { [JsonProperty("conditions")] public Conditions Conditions { get; set; } [JsonProperty("directionFix")] public bool DirectionFix { get; set; } [JsonProperty("image")] public Image Image { get; set; } [JsonProperty("list")] public PageList[] List { get; set; } [JsonProperty("moveFrequency")] public long MoveFrequency { get; set; } [JsonProperty("moveRoute")] public MoveRoute MoveRoute { get; set; } [JsonProperty("moveSpeed")] public long MoveSpeed { get; set; } [JsonProperty("moveType")] public long MoveType { get; set; } [JsonProperty("priorityType")] public long PriorityType { get; set; } [JsonProperty("stepAnime")] public bool StepAnime { get; set; } [JsonProperty("through")] public bool Through { get; set; } [JsonProperty("trigger")] public long Trigger { get; set; } [JsonProperty("walkAnime")] public bool WalkAnime { get; set; } } public partial class Conditions { [JsonProperty("actorId")] public long ActorId { get; set; } [JsonProperty("actorValid")] public bool ActorValid { get; set; } [JsonProperty("itemId")] public long ItemId { get; set; } [JsonProperty("itemValid")] public bool ItemValid { get; set; } [JsonProperty("selfSwitchCh")] public string SelfSwitchCh { get; set; } [JsonProperty("selfSwitchValid")] public bool SelfSwitchValid { get; set; } [JsonProperty("switch1Id")] public long Switch1Id { get; set; } [JsonProperty("switch1Valid")] public bool Switch1Valid { get; set; } [JsonProperty("switch2Id")] public long Switch2Id { get; set; } [JsonProperty("switch2Valid")] public bool Switch2Valid { get; set; } [JsonProperty("variableId")] public long VariableId { get; set; } [JsonProperty("variableValid")] public bool VariableValid { get; set; } [JsonProperty("variableValue")] public long VariableValue { get; set; } } public partial class Image { [JsonProperty("characterIndex")] public long CharacterIndex { get; set; } [JsonProperty("characterName")] public string CharacterName { get; set; } [JsonProperty("direction")] public long Direction { get; set; } [JsonProperty("pattern")] public long Pattern { get; set; } [JsonProperty("tileId")] public long TileId { get; set; } } public partial class PageList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("indent")] public long Indent { get; set; } [JsonProperty("parameters")] public ParameterElement[] Parameters { get; set; } } public partial class MoveRoute { [JsonProperty("list")] public MoveRouteList[] List { get; set; } [JsonProperty("repeat")] public bool Repeat { get; set; } [JsonProperty("skippable")] public bool Skippable { get; set; } [JsonProperty("wait")] public bool Wait { get; set; } } public partial class MoveRouteList { [JsonProperty("code")] public long Code { get; set; } [JsonProperty("parameters")] public object[] Parameters { get; set; } } public enum Name { Battle1, City, Empty, Inn1 }; public enum ParameterEnum { Actor18, Empty, WaitingIconGif1, Фыввфывфы }; public partial struct ParameterElement { public Bgm Bgm; public ParameterEnum? Enum; public long? Integer; public static implicit operator ParameterElement(Bgm Bgm) => new ParameterElement { Bgm = Bgm }; public static implicit operator ParameterElement(ParameterEnum Enum) => new ParameterElement { Enum = Enum }; public static implicit operator ParameterElement(long Integer) => new ParameterElement { Integer = Integer }; } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { NameConverter.Singleton, ParameterElementConverter.Singleton, ParameterEnumConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class NameConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(Name) || t == typeof(Name?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return Name.Empty; case "Battle1": return Name.Battle1; case "City": return Name.City; case "Inn1": return Name.Inn1; } throw new Exception("Cannot unmarshal type Name"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (Name)untypedValue; switch (value) { case Name.Empty: serializer.Serialize(writer, ""); return; case Name.Battle1: serializer.Serialize(writer, "Battle1"); return; case Name.City: serializer.Serialize(writer, "City"); return; case Name.Inn1: serializer.Serialize(writer, "Inn1"); return; } throw new Exception("Cannot marshal type Name"); } public static readonly NameConverter Singleton = new NameConverter(); } internal class ParameterElementConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterElement) || t == typeof(ParameterElement?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { switch (reader.TokenType) { case JsonToken.Integer: var integerValue = serializer.Deserialize<long>(reader); return new ParameterElement { Integer = integerValue }; case JsonToken.String: case JsonToken.Date: var stringValue = serializer.Deserialize<string>(reader); switch (stringValue) { case "": return new ParameterElement { Enum = ParameterEnum.Empty }; case "Actor1_8": return new ParameterElement { Enum = ParameterEnum.Actor18 }; case "waiting-icon-gif-1": return new ParameterElement { Enum = ParameterEnum.WaitingIconGif1 }; case "фыввфывфы": return new ParameterElement { Enum = ParameterEnum.Фыввфывфы }; } break; case JsonToken.StartObject: var objectValue = serializer.Deserialize<Bgm>(reader); return new ParameterElement { Bgm = objectValue }; } throw new Exception("Cannot unmarshal type ParameterElement"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { var value = (ParameterElement)untypedValue; if (value.Integer != null) { serializer.Serialize(writer, value.Integer.Value); return; } if (value.Enum != null) { switch (value.Enum) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } } if (value.Bgm != null) { serializer.Serialize(writer, value.Bgm); return; } throw new Exception("Cannot marshal type ParameterElement"); } public static readonly ParameterElementConverter Singleton = new ParameterElementConverter(); } internal class ParameterEnumConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(ParameterEnum) || t == typeof(ParameterEnum?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize<string>(reader); switch (value) { case "": return ParameterEnum.Empty; case "Actor1_8": return ParameterEnum.Actor18; case "waiting-icon-gif-1": return ParameterEnum.WaitingIconGif1; case "фыввфывфы": return ParameterEnum.Фыввфывфы; } throw new Exception("Cannot unmarshal type ParameterEnum"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (ParameterEnum)untypedValue; switch (value) { case ParameterEnum.Empty: serializer.Serialize(writer, ""); return; case ParameterEnum.Actor18: serializer.Serialize(writer, "Actor1_8"); return; case ParameterEnum.WaitingIconGif1: serializer.Serialize(writer, "waiting-icon-gif-1"); return; case ParameterEnum.Фыввфывфы: serializer.Serialize(writer, "фыввфывфы"); return; } throw new Exception("Cannot marshal type ParameterEnum"); } public static readonly ParameterEnumConverter Singleton = new ParameterEnumConverter(); } }
Мне неизвестна структура. Разработчикам та известна. В принципе сконвентировав 2 структуры 2х json (1 который для примера скопировал другой у моего проекта) получил 2 одинаковые структуры. Но это не отменяет того факта что кое какие поля могут быть неизвестны а работать нужно исключительно с событиями (events)