簡體   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