Jint(.NET JavaScript分析器)始终返回ExpandoObject

问题描述 投票:0回答:1

我尝试为游戏编写mod。这对我来说是全新的领域,所以我在这里可能走错了路。游戏是用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个回答
0
投票

[ExpandoObject是.Net与JavaScript对象最接近的等效项-这是一个可以在其中即时添加或删除成员的对象。

这向我暗示了底层的JavaScript方法实际上是在返回对象而不是字符串。

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

var json = (string)JsonConvert.SerializeObject(expando);

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

var modPath = expando.modPath;
© www.soinside.com 2019 - 2024. All rights reserved.