使用 JInt 或类似工具解释/解析 c# 中的 Javascript 变量

pin*_*goo 2 c# jint

我正在尝试构建一个使用为 JavaScript 制作的 API 的应用程序。它不是发送 JSON 或 XML,而是发送一个带有 JavaScript 对象的 Script 标签,如下所示:

<script>
var apiresult = {
    success: true,
    data: {
        userName: "xxxxx",
        jsonData: { 
            "id" : "8342859",
            "price" : "83.94"
            }
        }
    };
</script>
Run Code Online (Sandbox Code Playgroud)

我试图摆脱“jsonData”属性。在浏览器领域,你可以去:

apiresult.data.jsonData;
Run Code Online (Sandbox Code Playgroud)

显然我不能在 C# 中做到这一点。我试过像这样使用 Jint 和 HtmlAgilityPack:

HtmlDocument = await client.GetHTMLAsync(url);

string scriptTag = htmlResult.DocumentNode.SelectNodes("//script").InnerHtml;

scriptTag += " return apiresult.data.jsonData;

JintEngine engine = new JintEngine();

Jint.Native.JsObject r = (Jint.Native.JsObject)engine.Run(scriptTag);
Run Code Online (Sandbox Code Playgroud)

如果我在观察窗口中展开“r.Results”,它会显示变量值,但是我如何只获取原始 JSON 以便我可以将其解析为我的对象?

use*_*830 5

我遇到了同样的问题,这是我使用 Jint 的方法

        var engine =new Engine();

        var html = 
                    @"<script>
                        var apiresult = {
                            success: true,
                            data: {
                                userName: ""xxxxx"",
                                jsonData: { 
                                    ""id"" : ""8342859"",
                                    ""price"" : ""83.94""
                                    }
                                }
                            };
                    </script>";


        var doc=new HtmlDocument();
        doc.LoadHtml(html);
        var script = doc.DocumentNode.SelectNodes("//script").First().InnerHtml;

        var result = engine
            .Execute(script)
            .Execute("var x=apiresult.data.jsonData;")
            .GetValue("x");

        var jsonData = engine.Json.Stringify(result, new[] { result });
Run Code Online (Sandbox Code Playgroud)