2

我正在使用 Json.net 将 json 字符串转换为动态字符串。当我将此动态用作 Razor 模板的模型时,出现错误...

无法编译模板。'Newtonsoft.Json.Linq.JObject' 不包含'Name' 的定义,并且找不到接受'Newtonsoft.Json.Linq.JObject' 类型的第一个参数的扩展方法'Name'(您是否缺少 using 指令还是汇编参考?)

如果我只使用一个简单的匿名对象作为模型,它就可以正常工作。

这是一个简单的控制台应用程序中显示的问题,我使用 NuGet 拉入两个库...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

您不能直接将 传递给JObjectsRazorEngine因为每当您将值分配给 时,JObject它们都存储为 type JValue。当您尝试检索分配的值时,您也会得到一个JValue不是分配的值。

前任。

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

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

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