Если я сериализую класс в 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.

Другие вопросы по тегам