我有存储在数据库中的模板,以及在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#模板方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)