javascript - Jint(.NET javascript 解析器)总是返回 ExpandoObject
问题描述
我尝试为游戏编写模组。这对我来说是全新的领域,所以我可能在这里走错了路。游戏是用 Unity 编写的,您可以将 .script 文件添加到您的 mod。.script 文件可以包含由 Jint 解析的 javascript。
我试图从一个游戏 DLL 中输出一个简单的字符串:
var UnityEngine = importNamespace("UnityEngine");
var IceEngine = importNamespace("IceEngine");
var GameMain = importNamespace("GameMain");
var output = GameMain.Game.ModPath;
UnityEngine.Debug.Log("----- Testmod Output Start-----");
UnityEngine.Debug.Log(output);
UnityEngine.Debug.Log("----- Testmod Output End-----");
在 GameMain.dll 中它说:
public class Game : MonoBehaviour, IUserManagerListener, IAccountMsg, IMsg, IRenderListener
{
private static string modPath = Game.userPath + "/Mods";
// lots of other code...
public static string ModPath
{
get
{
return Game.modPath;
}
}
我的理解是 GameMain.Game.ModPath 应该给我一个字符串。但是日志文件中的输出是这样的:
----- Testmod Output Start-----
System.Dynamic.ExpandoObject
----- Testmod Output End-----
无论我尝试输出什么,我都会得到一个 System.Dynamic.ExpandoObject 并且不知道如何处理它。也许有人可以给我提示/资源来帮助。:)
解决方案
这ExpandoObject
是 .Net 对 JavaScript 对象最接近的等价物 - 这是一个可以动态添加或删除成员的对象。
这向我表明,底层的 JavaScript 方法实际上是返回一个对象而不是字符串。
您可以使用Newtonsoft.Json
序列化对象:
var json = (string)JsonConvert.SerializeObject(GameMain.Game.ModPath);
这将允许您查看是否有您应该使用的属性。所以假设这给了你{"modPath":"..."}
,你应该像这样直接访问该属性:
var modPath = (string)GameMain.Game.ModPath.modPath;
推荐阅读
- git - 规范化后的 Git 行尾:好的做法还是坏的做法?
- sql - 如何在水晶报表公式中用星号替换数字?
- function - 如何在 VHDL(87 后;即 93、2008)中为函数调用编写别名?
- kubernetes - 如何在自定义环境中设置 2 节点 Kubernetes 集群
- django - Modelform 未使用当前值填充其字段
- node.js - Firebase 验证 ID 令牌 - Node.js
- database - 如何有效地从 DynamoDB 中检索海量数据?
- ios - 当应用程序通过推送通知从终止状态打开时,iOS Web 视图应用程序崩溃
- angular - 带有 aria-live 的可访问性 Angular5
- r - 2d 绘图为空(第三个变量中的 2 行和线条颜色)