Если я сериализую класс в C#, может ли Unrealscript прочитать его обратно?
Я пытаюсь найти способ передавать большие объемы информации между C# и Unrealscript. Одна из вещей, которую я пытаюсь исследовать, заключается в том, может ли C# сериализовать класс для UnrealScript для последующего чтения.
Сериализация в C# не так уж и плоха:
InfoToSerialize myInfo = new InfoToSerialize();
myInfo.i = 1;
myInfo.j = 2;
myInfo.str = "hello";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, myInfo);
stream.Close();
Этот небольшой фрагмент кода успешно создает двоичный файл с именем MyFile, который выглядит вполне сериализованным. если вы откроете его в приложении блокнота, большая часть данных будет состоять из нечитаемых символов и значков.
Мой вопрос: тогда можно ли получить UnrealScript доступ к этому файлу и десериализовать его? Мои исследования по этой теме до сих пор показывают, что это невозможно, но, возможно, где-то здесь был некоторый опыт в этой области. Я знаю, что UnrealScript имеет свою собственную функцию сохранения и загрузки, но я не уверен, поможет ли это мне в этой задаче. Любая информация с благодарностью!
3 ответа
Это возможно, но это может потребовать дополнительной работы с вашей стороны, в зависимости от того, что доступно в UnrealScript..NET Framework поддерживает несколько различных схем сериализации. Метод по умолчанию - сериализация во внутренний двоичный формат. Это прекрасно работает, если вам нужно читать и писать из одной и той же программы.NET (и если ваша программа может обрабатывать обновления - двоичная сериализация может прерываться между различными выпусками.NET Framework). Но в вашем случае это не сработает совсем - вам нужно иметь возможность читать объект из программы, не написанной на платформе.NET.
К счастью, есть также способы изменить ваши методы сериализации. Вы можете выбрать сериализацию, например, в XML. В дальнем конце спектра, если никакие сериализаторы, предоставляемые платформой.NET, не могут быть прочитаны UnrealScript, вы можете написать свой собственный сериализатор, который записывает в любой формат, который вам необходим.
Эта ссылка MSDN содержит больше информации о сериализации.
Только если вы используете независимую от языка схему сериализации.
Поставщики сериализации.NET по умолчанию требуют.NET для чтения объекта обратно. Но если вы используете независимую от языка схему сериализации, такую как обычный старый XML, JSON или ваш собственный предопределенный формат, то любой другой язык должен иметь возможность его анализировать. если поставщик доступен.
Формат, используемый BinaryFormatter, довольно специфичен для.NET и основан на информации о типах.NET, которая недоступна для легкой сериализации в UnrealScript.
Однако, я считаю, что разбор JSON доступен в UDK, хотя вам, вероятно, придется выполнять большую часть фактической десериализации вручную. Существует несколько способов сериализации в JSON из.NET, и JSON также достаточно просто сериализовать вручную.
Вы можете JSON.NET ( http://json.codeplex.com/) для быстрой сериализации JSON.