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

我应该采用哪种C#模板方法?,第1张

概述是)我有的 我有存储在数据库中的模板,以及在C#中转换为字典的 JSON数据. 例: 模板:“嗨{FirstName}” 数据:“{FirstName:’Jack’}” 通过使用正则表达式提取模板中{}内的任何内容,这可以轻松处理一个级别的数据. 我想要的是 我希望能够比第一层更深入地学习JSON. 例: 模板:“嗨{姓名:{First}}” 数据:“{姓名:{第一名:’杰克’,最后一名:’史密斯 是)我有的
我有存储在数据库中的模板,以及在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].{}之间的字符串值.

总结

以上是内存溢出为你收集整理的我应该采用哪种C#模板方法?全部内容,希望文章能够帮你解决我应该采用哪种C#模板方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存