繁体   English   中英

Jint(.NET javascript 解析器)总是返回 ExpandoObject

[英]Jint (.NET javascript parser) always returns ExpandoObject

我尝试为游戏编写模组。 这对我来说是全新的领域,所以我可能在这里走错了路。 游戏是用 Unity 编写的,您可以将 a.script 文件添加到您的 mod。 .script 文件可以包含由 Jint 解析的 javascript。

我试图 output 一个来自游戏 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 应该给我一个字符串。 但是日志文件中的 output 是这样的:

----- Testmod Output Start-----
System.Dynamic.ExpandoObject
----- Testmod Output End-----

不管我尝试 output,我得到一个 System.Dynamic.ExpandoObject 并且不知道如何处理它。 也许有人可以给我提示/资源来帮助。 :)

ExpandoObject是.Net 对 JavaScript Object 最接近的等价物 - 这是一个 object 可以即时添加或删除成员。

这向我表明,底层的 JavaScript 方法实际上是返回 object 而不是字符串。

您可以使用Newtonsoft.Json序列化 object:

var json = (string)JsonConvert.SerializeObject(GameMain.Game.ModPath);

这将允许您查看是否有您应该使用的属性。 因此,假设这给了您{"modPath":"..."} ,您应该像这样直接访问该属性:

var modPath = (string)GameMain.Game.ModPath.modPath;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM