Изменить программу чтения json без доступа к редактированию класса программы чтения.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Изменить программу чтения json без доступа к редактированию класса программы чтения.

Сообщение Anonymous »

Мы работаем над модом локализации для игры Il2cpp. Изначально, чтобы применить к игре локализацию, мы запускали этот код, в котором есть все свойства и строки из исходного JSON-файла. У нас есть частный Dictionary __instance._dic, который написан в игре. Вопрос в том... Есть ли способ изменить класс значения JSON, не затрагивая указанный класс в коде игры? Я хочу добавить несколько своих собственных строк в файл JSON и сделать их читабельными в этом классе.
Я и мой друг попытались расширить класс, создав новые: CustomClassList код> и CustomClass. На этом этапе я совершенно запутался.

Код: Выделить всё

var jsonString = File.ReadAllText("Myfile.json");
GameClassList Localization = JsonSerializer.Deserialize(jsonString);
foreach (var applyChange in Localization.assets)
{
__instance._dic[applyChange.name] = applyChange;
}
(Имена классов являются заполнителями)
Игра либо не видит CustomClass и CustomClassList, либо , при изменении кода выдает в игре ошибку, что CustomClass невозможно преобразовать в GameClass. На моей стороне нет ошибок компиляции и ошибок преобразования на стороне моего друга.
РЕДАКТИРОВАТЬ:
Поскольку я единственный, кто остался поработайте над этой проблемой в команде, думаю, смогу показать больше кода для лучшего понимания. Я также отказываюсь от использования названий наших пользовательских классов.
Это пользовательский дочерний класс для добавления новых полей и создания с их помощью List. >

Код: Выделить всё

{
[Serializable]
public class NicknameData : *GameClass*
{
public string? runame;
public string? ruNickName;

public NicknameData() {}
public static *GameClass* HELP(NicknameData data)
{
var PLEASE = JsonSerializer.Serialize(data);
*GAMECLASS* assetData = JsonSerializer.Deserialize(PLEASE);
return assetData;
}
}
[Serializable]
public class NicknameDataList : *GameClassList*
{
public new Il2CppSystem.Collections.Generic.List assetData;

public NicknameDataList() { }
}
}
А это код Harmony, который мой друг сделал (и я изменил) до версии, указанной выше:

Код: Выделить всё

public static string nicknameJSON = File.ReadAllText(*JSON_FILE.json*);
public static NicknameDataList nicknameDataList = JsonSerializer.Deserialize(nicknameJSON);

[HarmonyPatch(typeof(StoryData), nameof(StoryData.Init))]
[HarmonyPostfix]
private static void StoryDataInit(StoryData __instance)
{
*GameClassList* blyahaMuha = nicknameDataList;

foreach (var nicknameData in blyahaMuha.assetData)
{
__instance.*_dic*[nicknameData.name] = (*GameClass*)NicknameData.HELP((NicknameData)nicknameData);
}
}
Поскольку этот код содержит фрагменты кода игры, я заменил некоторые имена на заполнители, чтобы не создавать проблем. Измененные значения окружены знаком "**".
Надеюсь, это изменение сделает вопрос и проблему более понятными.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ader-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»