C# 正则表达式、Json

正则表达式:  

正则表达式主要的参考文章:http://www.cnblogs.com/stg609/archive/2009/06/03/1492709.html#anchorD

需求:将cocos2dx客户端上传的Json对象转换为C#对象。

Json对象:

{"_A":10, "_B":"123", "__cname":"Object","_ListC":[{"_BaseA":10, "_BaseB":"yes","__cname":"BaseObject"}, {"_BaseA":20, "_BaseB":"no","__cname":"BaseObject"}]}

服务端不需要"__cname"属性。

 

转换代码:

        private string AdjustInputJson(string input)
        {
            string pattern1 = "\"__cname\":\".*?\"";     //消除cocos客户端的__cname属性
            string pattern2 = @",\s?,";                  //,, 转 ,
            string pattern3 = @"{\s?,";                  //{, 转 {    
            string pattern4 = @",\s?}";                  //,} 转 }   

            Regex r1 = new Regex(pattern1);
            Regex r2 = new Regex(pattern2);
            Regex r3 = new Regex(pattern3);
            Regex r4 = new Regex(pattern4);

            Match m1 = r1.Match(input);
            var tmpString1 = r1.Replace(input, "");

            Match m2 = r2.Match(tmpString1);
            var tmpString2 = r2.Replace(tmpString1, ",");

            Match m3 = r3.Match(tmpString2);
            var tmpString3 = r3.Replace(tmpString2, "{");

            Match m4 = r4.Match(tmpString3);
            var tmpString4 = r4.Replace(tmpString3, "}");

            return tmpString4;
        }

 

其他代码 - 单个适配获取:

                string pattern = "\"__cname\":\".*?\"";
                Regex r = new Regex(pattern);
                Match m = r.Match(content);
                if(m.Success)
                {
                    Console.WriteLine(m.Value);
                }

其他代码 - 多个适配获取:

                string pattern = "\"__cname\":\".*?\"";
                var resGroup = Regex.Matches(content, pattern);
                foreach(var match in resGroup)
                {
                    Console.WriteLine(match.ToString());
                }

 

Json转换:

C#一般用 Newtonsoft.Json。

问题在于对 List 的转换:之前一直以为要将其反序列化为 Scut 的 CacheList 的,需要手动修改 Json 串,为其增加 CacheList 的私有变量 “_List”,最后发现不用。

原因应该在于 Newtonsoft.Json 的序列/反序列化,针对的是 IList 这个基类,而 CacheList 是有继承 IList 的。

待验证噢。

推荐分享:http://www.cnblogs.com/zxx193/p/3664562.html

 

posted on 2016-10-11 19:36  青墨淡潋  阅读(1496)  评论(0)    收藏  举报