2017-09-04 3 views
1

私は、Jurassic JavaScriptエンジンを介してJavaScriptに公開される.NETクラスを作成しようとしています。クラスはHTTP応答オブジェクトを表します。 HTTPレスポンスには同じ名前の複数のヘッダーがある可能性があるため、特定の名前のヘッダーのIEnumerableを返すメソッドを含めることにします。IEnumerableを返すメソッドを持つJavaScriptに.NETオブジェクトを公開することはできますか?

これは私がこれまで持っているものです:私はgetHeadersメソッドをテストする場合

public class JsResponseInstance : ObjectInstance 
{ 
    private IDictionary<string, IList<string>> _headers; 

    public JsResponseInstance(ObjectInstance prototype) 
     : base(prototype) 
    { 
     this.PopulateFunctions(); 
     _headers = new Dictionary<string, IList<string>>(); 
    } 

    [JSFunction(Name = "addHeader")] 
    public virtual void addHeader(string name, string value) 
    { 
     IList<string> vals; 
     bool exists = _headers.TryGetValue(name, out vals); 
     if (!exists) 
     { 
      vals = new List<string>(); 
      _headers[name] = vals; 
     } 
     vals.Add(value); 
    } 

    [JSFunction(Name = "getHeaders")] 
    public virtual IList<string> getHeaders(string name) 
    { 
     IList<string> vals; 
     bool exists = _headers.TryGetValue(name, out vals); 
     if (!exists) 
     { 
      return new List<string>(); 
     } 
     return vals; 
    } 
} 

は私がJavascriptExceptionを得る:Unsupported type: System.Collections.Generic.IList'1[System.String]

私はIListのからgetHeadersメソッドの戻り値の型を変更しようとしましたまた、オプションのIsEnumerableプロパティをメソッドを修飾するJSFunction属性に追加します。どちらの変更も違いをもたらさなかった、私はまだ同じ例外を見ていた。

JavaScriptに公開されている.NETクラスのメソッドからIEnumerableを返す方法はありますか?

答えて

0

ジュラ紀の維持者であるPaul Bartrumがこの質問にGitHubで答えました。

彼は、メソッドがObjectInstanceから派生した型を返さなければならないと述べました。列挙型が必要なので、その戻り値の型はArrayInstanceでなければなりません。

最終作業.NETコードは次のとおりです。

[JSFunction(Name = "getHeaders")] 
public virtual ArrayInstance getHeaders(string name) 
{ 
    IList<string> vals; 
    bool exists = _headers.TryGetValue(name, out vals); 
    if (!exists) 
    { 
     return this.Engine.Array.New(); 
    } 
    return this.Engine.Array.New(vals.ToArray()); 
} 
関連する問題