【问题标题】:Jint (.NET javascript parser) always returns ExpandoObjectJint(.NET javascript 解析器)总是返回 ExpandoObject
【发布时间】:2020-06-11 15:26:12
【问题描述】:

我尝试为游戏编写模组。这对我来说是全新的领域,所以我可能在这里走错了路。 游戏是用 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 并且不知道如何处理它。 也许有人可以给我提示/资源来帮助。 :)

【问题讨论】:

    标签: javascript c# unity3d expandoobject jint


    【解决方案1】:

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

    这表明底层的 JavaScript 方法实际上是返回一个对象而不是一个字符串。

    你可以使用Newtonsoft.Json来序列化对象:

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

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

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

    【讨论】:

    • 感谢您的建议!但不幸的是,我没有让它工作。我试过var Newtonsoft = importNamespace("Newtonsoft");var output = Newtonsoft.Json.JsonConvert.SerializeObject(GameMain.Game);UnityEngine.Debug.Log(output);var output = UnityEngine.JSONSerializeModule.JsonUtility.ToJson(GameMain.Game);UnityEngine.Debug.Log(output);但是两次我都得到了错误:JavaScriptException: Invalid generic type parameter
    • 啊...可能是我的错误,我没有发现您的第一个示例实际上是一个脚本文件。
    • 似乎有几个步骤可以让 CLR 类型在 Jint github.com/sebastienros/… 中工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2013-08-15
    • 2015-12-16
    • 2015-05-27
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多