我可以使用WebBrowser.ObjectForScripting
WinForms控件中的window.external
来调用WebBrowser
的C#方法,并传递string
,int
,bool
然而,我不知道如何传递javascript Date
对象,并以某种方式将其转换/编组为.NET DateTime
类。
显然,我可以通过string
并解析它,但这不是重点。我只是好奇我怎么能用javascript Date
和.NET DateTime
来做?
答案 0 :(得分:3)
您可以利用Javascript中的dates表示为自UNIX epoch(1970-01-01 00:00:00 UTC)以来经过的毫秒数这一事实。使用valueOf()方法从Date
对象中获取该值:
var millisecondsSinceEpoch = yourDate.valueOf();
如果您可以将该值作为double
封送到C#,则可以使用其构造函数和AddMilliseconds()方法创建相应的DateTime
对象:
DateTime yourDateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(millisecondsSinceEpoch);
答案 1 :(得分:1)
我为我的项目找到了更好的解决方案。
在javascript中:
var date = new Date();
myComObject.DoSomething(date.getVarDate());
在C#中
[ComVisible(true)]
public class Foo
{
public void Bar(DateTime dateTime)
{
Console.WriteLine(dateTime);
}
}
答案 2 :(得分:0)
我终于开始工作了。我不知道为什么,但我无法将其与dynamic
一起使用。这是解决方案:
[ComVisible(true)]
public class Foo
{
public void Bar(object o)
{
var dateTime = (DateTime)o.GetType().InvokeMember("getVarDate", BindingFlags.InvokeMethod, null, o, null);
Console.WriteLine(dateTime);
}
}