加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我应该采用哪种C#模板方法?

发布时间:2020-12-15 08:25:49 所属栏目:百科 来源:网络整理
导读:是)我有的 我有存储在数据库中的模板,以及在C#中转换为字典的 JSON数据. 例: 模板:“嗨{FirstName}” 数据:“{FirstName:’Jack’}” 通过使用正则表达式提取模板中{}内的任何内容,这可以轻松处理一个级别的数据. 我想要的是 我希望能够比第一层更深入地
是)我有的
我有存储在数据库中的模板,以及在C#中转换为字典的 JSON数据.

例:

模板:“嗨{FirstName}”

数据:“{FirstName:’Jack’}”

通过使用正则表达式提取模板中{}内的任何内容,这可以轻松处理一个级别的数据.

我想要的是
我希望能够比第一层更深入地学习JSON.

例:

模板:“嗨{姓名:{First}}”

数据:“{姓名:{第一名:’杰克’,最后一名:’史密斯’}}”

我应该采取什么方法? (以及从哪个选择开始的一些指导)

>正则表达式
>不在模板中使用JSON(支持xslt或类似的东西)
>别的

我也希望能够遍历模板中的数据,但我根本不知道从哪一个开始!

谢谢堆

解决方法

我将如何做到这一点:

将模板更改为此格式您好{Name.First}

现在创建一个JavaScriptSerializer来转换字典中的JSON< string,object>

JavaScriptSerializer jss = new JavaScriptSerializer();
dynamic d = jss.Deserialize(data,typeof(object));

现在变量d在字典中具有JSON的值.

有了这个,您可以针对正则表达式运行模板,以递归方式将{X.Y.Z.N}替换为字典的键.

完整示例:

public void Test()
{
    // Your template is simpler
    string template = "Hi {Name.First}";

    // some JSON
    string data = @"{""Name"":{""First"":""Jack"",""Last"":""Smith""}}";

    JavaScriptSerializer jss = new JavaScriptSerializer();

    // now `d` contains all the values you need,in a dictionary
    dynamic d = jss.Deserialize(data,typeof(object));

    // running your template against a regex to
    // extract the tokens that need to be replaced
    var result = Regex.Replace(template,@"{?{([^}]+)}?}",(m) =>
        {
            // Skip escape values (ex: {{escaped value}} )
            if (m.Value.StartsWith("{{"))
                return m.Value;

            // split the token by `.` to run against the dictionary
            var pieces = m.Groups[1].Value.Split('.');
            dynamic value = d;

            // go after all the pieces,recursively going inside
            // ex: "Name.First"

            // Step 1 (value = value["Name"])
            //    value = new Dictionary<string,object>
            //    {
            //        { "First": "Jack" },{ "Last": "Smith" }
            //    };

            // Step 2 (value = value["First"])
            //    value = "Jack"

            foreach (var piece in pieces)
            {
                value = value[piece]; // go inside each time
            }

            return value;
        });
}

我没有处理异常(例如找不到值),你可以处理这种情况并返回匹配的值(如果找不到). m.Value表示原始值或m.Groups [1].{}之间的字符串值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读