2

私はJson.netを使用してjson文字列を動的に変換しています。このダイナミックをRazorテンプレートのモデルとして使用すると、エラーが発生します...

テンプレートをコンパイルできません。'Newtonsoft.Json.Linq.JObject'には'Name'の定義が含まれておらず、タイプ'Newtonsoft.Json.Linq.JObject'の最初の引数を受け入れる拡張メソッド'Name'が見つかりませんでした(usingディレクティブがありませんか?またはアセンブリリファレンス?)

モデルとして単純な匿名オブジェクトを使用するだけであれば、正常に機能します。

これは、NuGetを使用して2つのライブラリ(Newtonsoft JSONとRazorEngine)をプルした単純なコンソールアプリに表示される問題です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // template used for generation
            var template = "<div>Hello @Model.Name</div>";

            // create model
            dynamic model = new System.Dynamic.ExpandoObject();
            model.Name = "Foo";

            // this works just fine
            RazorEngine.Razor.Parse(template, model);

            // convert model to string
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(model);

            // regenerate model
            model = Newtonsoft.Json.Linq.JObject.Parse(json);

            // this prints 'Foo' to the console just fine so the model is valid!
            string name = model.Name;
            System.Diagnostics.Debug.WriteLine(name);

            // this throws the error above!
            RazorEngine.Razor.Parse(template, model);
        }
    }
}

誰かがここで問題を解決するのを手伝ってもらえますか?

4

1 に答える 1

1

に値を割り当てると、タイプとして保存されるため、JObjectsを直接に渡すことはできません。割り当てられた値を取得しようとすると、割り当てられていない値も取得されます。RazorEngineJObjectJValueJValue

元。

dynamic person = new JObject();
person.Name = "Vijay";

Console.WriteLine(person.Name.GetType());

==> NewtonSoft.Json.Linq.JValue
于 2012-06-29T10:52:55.850 に答える