大伟 一文玩转C#JSON, CSV, LIST

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using LitJson;
using Newtonsoft.Json;

namespace weiCmd
{
    public class Program
    {
        static void Main(string[] args)
        {
            string JsonFileName = "";
            //读取csv文件 生成 json文件
            Wei wei = new Wei();
            string FileName;
            FileName = @" C:\Users\Administrator\Desktop\测试表.csv";
            string strJSON = wei.WeiCsv2JSON(FileName);
            strJSON = wei.WeiCsv2JsonMessageWeiJson(strJSON);
            //保存JSON字符串,文件名称路径不变,生成一个.json结尾的文件
            JsonFileName = FileName.Substring(0, FileName.Length - 4) + ".json";
            StreamWriter sw = new StreamWriter(JsonFileName);
            sw.WriteLine(strJSON);
            sw.Flush();
            sw.Close();

            //读取json文件 生成  json类对象
            string str = wei.ReadFileToString(JsonFileName);
            Console.WriteLine("打印将要转换成json对象的字符串");
            Console.WriteLine(str);
            WeiJsonStruct WeiJsonObject = wei.JsonStr2Struct(str);

            //由json对象生成json文件
            wei.WeiStruct2JsonStr(WeiJsonObject);

            //由json对象生成csv文件
            wei.WeiStruct2csvStr(WeiJsonObject);




            Console.ReadLine();
        }
    }

    public class Wei
    {
        /// <summary>
        /// 读取带表头的csv文件生成JSON字符串
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public string WeiCsv2JSON(string file)
        {
            // 定义待返回的json字符串
            string weiJSONstr = "";
            // 加载csv文件对象
            FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs, Encoding.Default);

            // 读取第一行作为Key
            string[] tou = sr.ReadLine().Split(',');

            // 读取后续行作为Json值
            string hangStr;
            weiJSONstr += "[";
            while ((hangStr = sr.ReadLine()) != null)
            {

                string[] hang = hangStr.Split(',');
                for (int i = 0; i < tou.Length; i++)
                {
                    if (i == 0)
                    {
                        weiJSONstr += "{\"" + tou[i] + "\":\"" + hang[i] + "\",";
                    }
                    else if (i == tou.Length - 1)
                    {
                        weiJSONstr += "\"" + tou[i] + "\":\"" + hang[i] + "\"}," +
                            "";
                    }
                    else
                    {
                        weiJSONstr += "\"" + tou[i] + "\":\"" + hang[i] + "\",";
                    }
                }
            }
            weiJSONstr = weiJSONstr.Substring(0, weiJSONstr.Length - 1) + "]";

            // 关闭文件对象
            sr.Close();
            Console.WriteLine("打印csv文件转换成的json字符串------------------------------------");
            Console.WriteLine(weiJSONstr);
            //Console.ReadLine();
            return weiJSONstr;
        }


        /// <summary>
        /// 对list列表包装lmessage和WeiJson关键字,形成新的json字符串
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public string WeiCsv2JsonMessageWeiJson(string str)
        {
            string s;
            s = "{ \"message\":\"一个JSON字段的值\",\"WeiJson\":";
            s = s + str + "}";
            Console.WriteLine("打印包装lmessage和WeiJson关键子的JSON字符串------------------------------------");
            Console.WriteLine(s);
            return s;
        }

        /// <summary>
        /// 读取json字符串放回json结构体
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public WeiJsonStruct JsonStr2Struct(string str)
        {
            //解析json字符串 反序列化 方法一  需要litJson包
            WeiJsonStruct WeiJsonObject = JsonMapper.ToObject<WeiJsonStruct>(str);
            List<WeiHangType> list = WeiJsonObject.WeiJson;
            Console.WriteLine(list[0].name + "----------");
            return WeiJsonObject;
            //解析json字符串 反序列化 方法二  需要Newtonsoft.Json包
            //WeiJsonStruct WeiJsonObject = JsonConvert.DeserializeObject<WeiJsonStruct>(str);
            //List<WeiHangType> list = WeiJsonObject.WeiJson;
            //Console.WriteLine(list[0].name + "----------");
            //return WeiJsonObject;
        }
        /// <summary>
        /// JSON结构体转json字符串
        /// </summary>
        /// <param name="WeiJsonObject"></param>
        /// <returns></returns>
        public string WeiStruct2JsonStr(WeiJsonStruct WeiJsonObject)
        {
            string s = "";
            s = JsonMapper.ToJson(WeiJsonObject);
            Console.WriteLine("打印从结构体转成的字符串----------------------------");
            Console.WriteLine(s);
            return s;
        }
        /// <summary>
        /// JSON结构体转csv文件
        /// </summary>
        /// <param name="WeiJsonObject"></param>
        /// <returns></returns>
        public string WeiStruct2csvStr(WeiJsonStruct WeiJsonObject)
        {
            string s = "";
            //第一行表头
            s = "name,age,work01,work02,work03,work04,work05,work06\n";
            //数据行
            foreach (WeiHangType hang in WeiJsonObject.WeiJson)
            {
                s += hang.name+","+hang.age + "," + hang.work01 + "," + hang.work02 + "," + hang.work03 + "," + hang.work04 + "," + hang.work05 + "," + hang.work06+"\n";
            }
            Console.WriteLine("打印由json结构体生成的csv文件字符串----------------------------------------");
            Console.WriteLine(s);
            return s;
        }


        /// <summary>
        /// 读取文件 生成字符串
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public string ReadFileToString(string fileName)
        {
            string s = "";
            StreamReader sr = new StreamReader(fileName);
            string hang;
            while ((hang = sr.ReadLine()) != null)
            {
                s += hang;
            }
            Console.WriteLine("打印json文件读出来的字符串------------------------------------");
            Console.WriteLine(s);
            return s;
        }

      
    }


    //行结构体 
    [System.Serializable]
    public class WeiHangType
    {
        public string name { get; set; }  //需要和第一行保持一致
        public string age { get; set; }
        public string work01 { get; set; }
        public string work02 { get; set; }
        public string work03 { get; set; }
        public string work04 { get; set; }
        public string work05 { get; set; }
        public string work06 { get; set; }
    }
    //JSON数据结构
    [System.Serializable]
    public class WeiJsonStruct
    {
        public string message;
        public List<WeiHangType> WeiJson;
    }
}


name,age,work01,work02,work03,work04,work05,work06
用户01,valueB2,valueC2,valueD2,valueE2,valueF2,valueG2,valueH2
用户02,valueB3,valueC3,valueD3,valueE3,valueF3,valueG3,valueH3
用户03,valueB4,valueC4,valueD4,valueE4,valueF4,valueG4,valueH4
用户04,valueB5,valueC5,valueD5,valueE5,valueF5,valueG5,valueH5
用户05,valueB6,valueC6,valueD6,valueE6,valueF6,valueG6,valueH6
用户06,valueB7,valueC7,valueD7,valueE7,valueF7,valueG7,valueH7
用户07,valueB8,valueC8,valueD8,valueE8,valueF8,valueG8,valueH8
用户08,valueB9,valueC9,valueD9,valueE9,valueF9,valueG9,valueH9
用户09,valueB10,valueC10,valueD10,valueE10,valueF10,valueG10,valueH10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值