xml地图|网站地图|网站标签 [设为首页] [加入收藏]
自定义日志记录,JObject转换的使用方法
分类:编程

推导式 comprehensions(又称解析式):是 Python 中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点。推导式包括:

Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和修改部分的数据而非反序列化全部.

废话不多说,直接上代码:

1. 列表推导式
2. 字典推导式
3. 集合推导式

二.创建JSON数组和对象

 

对以上的三种推导式分别举例分析:

在进行Linq to JSON之前,首先要了解一下用于操作Linq to JSON的类.

很简单:将类复制到项目中,最后在配置文件上配置一下:logUrl即可。 默认保存在:项目/temp/log

一、列表推导式


类名 说明
JObject
 用于操作JSON对象
JArray
 用语操作JSON数组
JValue
 表示数组中的值
JProperty
 表示对象中的属性,以"key/value"形式
JToken
 用于存放Linq to JSON查询后的结果

 初稿1:

1、使用 [] 生成 list

例如:

list = [ i for i in range(20) if i%2 == 0 ]
print(list)

#output:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

/// <summary>
    /// 日志类
    /// </summary>
    /// <remarks>Creator: v-lxh  CreateTime: 2016/7/26 11:18:09</remarks>
    /// <Description></Description>
    public class Log
    {
        /// <summary>
        /// 写入日志.
        /// </summary>
        /// <param name="strList">The STR list.</param>
        /// <remarks>Creator: v-lxh  CreateTime: 2016/7/26 11:18:09</remarks>
        /// <Description></Description>
        public static void WriteLog(params object[] strList)
        {
            //判断是否开启日志模式
            //if (!LogModel) return;
            if (strList.Count() == 0) return;
            //日志文件路径
            string strDicPath = "";
            try
            {
                strDicPath = HttpContext.Current.Server.MapPath("~/temp/log/");
                if (strDicPath == null || strDicPath == "")
                {
                    strDicPath = System.Configuration.ConfigurationManager.AppSettings["logUrl"] + "/temp/log/";
                }
            }
            catch (Exception e)
            {
                strDicPath = System.Configuration.ConfigurationManager.AppSettings["logUrl"] + "/temp/log/";
            }
            string strPath = strDicPath + string.Format("{0:yyyy年-MM月-dd日}", DateTime.Now) + "日志记录.txt";
            if (!Directory.Exists(strDicPath))
            {
                Directory.CreateDirectory(strDicPath);
            }
            if (!File.Exists(strPath))
            {
                using (FileStream fs = File.Create(strPath)) { }
            }
            string str = File.ReadAllText(strPath);
            StringBuilder sb = new StringBuilder();
            foreach (var item in strList)
            {
                sb.Append("rn" + DateTime.Now.ToString() + "-----" + item + "");
            }
            File.WriteAllText(strPath, sb.ToString() + "rn-----z-----rn" + str);
        }

    }

2、使用 () 生成 generator

将列表推导式的 [] 换成 () 即可得到生成器。

generator = ( i for i in range(20) if i%2 == 0 )
print(generator)

#output:<generator object <genexpr> at 0x0000000000B5CA40>

通过 next() 就可以依次调用生成器中的数据。

 

 

二、字典推导式


存在 key 和 value,使用的是 {}。

dic = { "A":1, "b":2, "C":3, "d":4 }
new_dic = { k:v for k,v in dic.items() if k <= 'a'}
print(new_dic)

#output:{'C': 3, 'A': 1}

 

  初稿1--优化1:

三、集合推导式


它跟列表推导式也是类似的。区别在于它使用大括号 {},并且数据是无序和无重复的。

Set = { i**2 for i in [1,2,3,4,5,3] }
print(Set)

#output:{16, 1, 4, 9, 25}

 

 

 

   /// <summary>
    /// 日志类
    /// </summary>
    /// <remarks>Creator: lixh  CreateTime: 2017/3/23 11:18:09</remarks>
    /// <Description></Description>
    public class Log
    {
        //日期文件夹路径
        public static string strDicPath = "";

        //静态方法todo:在处理话类型之前自动调用,去检查日志文件夹是否存在
        static Log()
        {
            //todo:通过当前http请求上下文获取的服务器相对路径下的物理路径--非静态资源--占用资源
            //string strDicPath = System.Web.HttpContext.Current.Server.MapPath("~/temp/log/");

            //静态类型--获取应用所在的物理路径--节省资源
            strDicPath = System.Web.HttpRuntime.AppDomainAppPath + "\temp\logs\";
            //创建文件夹
            if (!Directory.Exists(strDicPath))
            {
                Directory.CreateDirectory(strDicPath);
            }
        }

        /// <summary>
        /// 写入日志.
        /// </summary>
        /// <param name="strList">The STR list.</param>
        /// <remarks>  </remarks>
        /// <Description></Description>
        public static void WriteLog(params object[] strList)
        {
            if (strList.Count() == 0) return;
            string strPath = "";  //文件路径
            try
            {
                strPath = strDicPath + string.Format("{0:yyyy年-MM月-dd日}", DateTime.Now) + "日志记录.txt";
            }
            catch (Exception e)
            {
                strDicPath = "C:\temp\log\";
                strPath = strDicPath + string.Format("{0:yyyy年-MM月-dd日}", DateTime.Now) + "日志记录.txt";
            }

            //todo:自动创建文件(但不能创建文件夹),并设置文件内容追加模式,使用using会自动释放FileSteam资源
            using (FileStream stream = new FileStream(strPath, FileMode.Append))
            {
                lock (stream)  //锁定资源,一次只允许一个线程写入
                {
                    StreamWriter write = new StreamWriter(stream);
                    string content = "";
                    foreach (var str in strList)
                    {
                        content += "rn" + DateTime.Now.ToString() + "-----" + str;
                    }
                    content += "rn-----z-----rn";
                    write.WriteLine(content);

                    //关闭并销毁流写入文件
                    write.Close();
                    write.Dispose();
                }
            }
        }


        /// <summary>
        /// 写入日志.
        /// </summary>
        /// <param name="strList">The STR list.</param>
        /// <remarks></remarks>
        /// <Description></Description>
        public static void WriteLog(Action DefFunc, Func<string> ErrorFunc = null)
        {
            try
            {
                DefFunc();
            }
            catch (Exception ex)
            {
                string strPath = strDicPath + string.Format("{0:yyyy年-MM月-dd日}", DateTime.Now) + "日志记录.txt";

                //todo:自动创建文件(但不能创建文件夹),并设置文件内容追加模式,使用using会自动释放FileSteam资源
                using (FileStream stream = new FileStream(strPath, FileMode.Append))
                {
                    lock (stream)   //锁定资源,一次只允许一个线程写入
                    {
                        StreamWriter write = new StreamWriter(stream);
                        string content = "rn" + DateTime.Now.ToString() + "-----" + ex.Message;
                        content += "rn" + DateTime.Now.ToString() + "-----" + ex.StackTrace;
                        content += "rn-----z-----rn";
                        write.WriteLine(content);

                        //关闭并销毁流写入文件
                        write.Close();
                        write.Dispose();
                    }
                }
            }
        }
    }

 

 

 

 

1.创建JSON对象

图片 1

            JObject staff = new JObject();
            staff.Add(new JProperty("Name", "Jack"));
            staff.Add(new JProperty("Age", 33));
            staff.Add(new JProperty("Department", "Personnel Department"));
            staff.Add(new JProperty("Leader", new JObject(new JProperty("Name", "Tom"), new JProperty("Age", 44), new JProperty("Department", "Personnel Department"))));
            Console.WriteLine(staff.ToString());

图片 2

结果:

图片 3

除此之外,还可以通过一下方式来获取JObject.JArray类似。

方法   说明
JObject.Parse(string json)
json含有JSON对象的字符串,返回为JObject对象
JObject.FromObject(object o)

o为要转化的对象,返回一个JObject对象

JObject.Load(JsonReader reader)
reader包含着JSON对象的内容,返回一个JObject对象

 

 

 

 

 

 

2.创建JSON数组

图片 4

            JArray arr = new JArray();
            arr.Add(new JValue(1));
            arr.Add(new JValue(2));
            arr.Add(new JValue(3));
            Console.WriteLine(arr.ToString());

图片 5

结果:

本文由澳门新葡亰手机版发布于编程,转载请注明出处:自定义日志记录,JObject转换的使用方法

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文