2016-09-20 8 views
0

JavaScriptをコンパイルするためにClearScriptを使用していて、それをSQLに格納するためにシリアル化したいと思います。しかし、それはSerializableではないとマークされています。どうすればいいですか?コンパイル済みのV8Scriptをクリアスクリプトでシリアル化するにはどうすればよいですか?

V8ScriptEngine engine = new V8ScriptEngine(); 
V8Script compiled = engine.Compile("var a = 'test'"); 
using (MemoryStream ms = new MemoryStream()) 
{ 
    new BinaryFormatter().Serialize(ms, compiled); 
    string compiledString = Convert.ToBase64String(ms.ToArray()); 
} 

私はこのエラーを取得する:

Additional information: Type 'Microsoft.ClearScript.V8.V8ScriptImpl' in Assembly 'ClearScriptV8-32, Version=5.4.6.0, Culture=neutral, PublicKeyToken=935d0c957da47c73' is not marked as serializable. 
+1

V8の観点からは、それをシリアル化する意味がありません。 V8の内部には多くの状態が必要なので、後でもう一度使うことはできません。どのコンセプトがC#に公開されているのかはっきりしていませんが、それはそのフードの中で起こっていることです。 – xaxxon

+0

また、あるものをあらかじめロードした後のV8分離/コンテキストの状態をスナップショットする方法もありますが、それはC#の直列化には関係しません。これはV8のことです。そのためのドキュメント(ネイティブAPI用)は次のとおりです。http://v8project.blogspot.com/2015/09/custom-startup-snapshots.html – xaxxon

答えて

2

A V8コンパイルされたスクリプトは、それを作成した分離株のインスタンスに関連付けられて、それはそれをシリアル化しても意味がありません。別のプロセスで再利用することはできず、同じプロセス内の別の分離と再利用することもできません。詳細情報はherehereです。

+0

ああ、ありがとうと思います。 – Bill

関連する問題