1

我试图找出一种在 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 有自己的保存和加载功能,但我不确定这是否有助于我完成这项任务。非常感谢任何信息!

4

3 回答 3

2

仅当您使用与语言无关的序列化方案时。

默认的 .NET 序列化提供程序需要 .NET 才能重新读取对象。但是如果您使用与语言无关的序列化方案,例如普通的旧 XML、JSON 或您自己的预定义格式,那么任何其他语言都应该能够解析它如果提供者可用。

于 2014-01-06T15:05:33.107 回答
2

这是可能的,但您可能需要做一些额外的工作,具体取决于 UnrealScript 中可用的内容。.NET 框架支持几种不同的序列化方案。默认方法是序列化为内部二进制格式。如果您需要从同一个 .NET 程序读取和写入(并且只要您的程序可以处理升级——二进制序列化可以在 .NET 框架的不同版本之间中断),这将非常有用。但这在您的情况下根本行不通——您需要能够从不是用 .NET 框架编写的程序中读取对象。

幸运的是,还有一些方法可以更改您的序列化方法。例如,您可以选择序列化为 XML。在光谱的另一端,如果 UnrealScript 无法读取 .NET 框架提供的序列化程序,那么您可以编写自己的序列化程序来写入您需要的任何格式。

这个 MSDN 链接有更多关于序列化的信息。

于 2014-01-06T15:08:42.390 回答
1

BinaryFormatter 使用的格式非常特定于 .NET,并且依赖于 .NET 类型信息,而这在 UnrealScript 中无法轻松序列化。

但是,我相信,UDK 中可以使用 JSON 解析,尽管您可能必须手动完成大部分实际的反序列化。有多种方法可以从 .NET 序列化为 JSON,而且 JSON 也很容易手动序列化。

您可以使用 JSON.NET ( http://json.codeplex.com/ ) 进行快速 JSON 序列化。

于 2014-01-06T15:13:09.137 回答