从InvokeScript获取返回到C#的JavaScript自定义类型,并保留自定义类型结构 - c#

我在WebBrowser控件上使用InvokeScript尝试使用适用于HTML的Google Maps JavaScript API制作简单的地图。我在JavaScript的HTML页面中编写了一些函数来处理地图,并且已经在C#的WPF应用程序中复制了这些方法并对其进行了编辑,以便它们调用方法并执行与JavaScript接口所需的操作。

我遇到了问题,因为并非JavaScript所返回的地图的所有值都是简单的单值类型(例如字符串,整数或布尔值),并且返回了自定义类型(例如LatLng),而且我不知道如何“保留”返回的值作为自定义类型的单独“部分”。为了帮助解释更多:

通常我可以使用以下代码:

return Convert.ToInt16(browser.InvokeScript("getHeading"));

在JavaScript中调用以下函数:

function GetHeading() {
    return map.getHeading();
}

并为地图的当前标题属性返回一个简单的整数值。这很容易,并且没有问题。但是某些函数具有自定义的返回类型。

LatLng类型由纬度值和经度值组成,因此它无法返回简单的值,如果我在本文的第一个代码段中尝试使用它,则会引发错误。对于某些功能,如下所示:

function GetCentre() {
    return map.getCenter();
}

返回一个LatLng,其中包含地图中心的纬度和经度。我如何保存返回的值并将其保留为纬度和经度,然后将其放入C#中的自定义类型中,如下所示:

public class LatLng
{
    public string latitude { get; set }
    public string longitude { get; set; }
}

我必须在javascript端编写两个单独的函数吗?:一个返回中心的纬度,另一个返回中心的经度。基本上,我想做的是在WebBrowser控件上使用InvokeScript,调用返回自定义类型的javascript函数,并将值保留在自定义类型中,然后可以在C#中使用该值,例如returnValue.latitude和returnValue.longitude。谢谢,我该怎么做?

参考方案

只需使用C#和.NET DLR的dynamic功能,并按原样返回JavaScript结构:

dynamic data = webBrowser1.Document.InvokeScript("eval", new[] { 
    "(function() { return { latitude: 1, longitude: 2 }; })()" });

MessageBox.Show("Data: " + data.latitude + ", " + data.longitude);

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

无法使用Google登录从Firebase接收“电子邮件”以验证ID令牌 - javascript

在我的网络应用程序中,我正在使用Firebase Google登录来验证用户身份,流程如下在前端,使用户使用firebase sdk登录,获取用户的idtoken并将其发送到服务器服务器使用idtoken验证用户并从idtoken获取电子邮件我正在使用python后端,并且使用google.oauth2.id_token模块来验证令牌并解码令牌问题是,对于少…

如何从客户端将数据插入数据库? - javascript

我是Web开发的初学者,可以访问cpanel上托管的网站,并且需要对其进行一些更改。这个网站的后端是由蛋糕PHP制作的,我想使用ajax从客户端将一些数据插入其数据库。问题是我不知道如何获取负责插入数据库的PHP文件的URL。参见下面的代码:var xhttp = newXMLHttpRequest(); xhttp.onreadystatechange= …

编码JSON数据以保留json格式 - javascript

由于JSON值是动态生成的,并且其中的值是基于用户输入的,因此,如果用户在字符串中输入了不可接受的字符(如"),则会使json无效。就像是:{ "tag" : "demo", "value": "user " input" } 有没有一种方法可以编码或转义JS…

执行onclick时获得意外令牌 - javascript

我正在使用onclick事件从PHP调用JS函数。这是我的代码:我在一个函数中,因此我需要通过PHP来完成它,因为然后我会返回:$html = '<input type="checkbox" checked value="1" id="setGetSku" name="se…