C#中单实例demo,读写json文件并解析后保存数据到内存中

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PaiBan
{
    public sealed class DataCenter
    {
        static DataCenter instance = null;

        private List<PbObject> m_baseData = new List<PbObject>();
        private List<TaskItem> m_task = new List<TaskItem>();

        //基础数据文件路径
        private string sBaseDataFile;

        //任务数据文件路径
        private string sTaskFile;


        private DataCenter()
        {
            string sPath = System.IO.Directory.GetCurrentDirectory();
            sBaseDataFile = sPath + "\\data\\basedata.json";
            sTaskFile = sPath + "\\data\\task.json";
        }

        public static DataCenter Instance
        {
            get
            {
                if(instance == null)
                {
                    instance = new DataCenter();
                }
                return instance;
            }
        }


        public List<PbObject> getBaseData()
        {
            return m_baseData;
        }

        public List<TaskItem> getTaskList()
        {
            return m_task;
        }

        public int addTask(TaskItem task)
        {
            m_task.Add(task);
            return m_task.Count;
        }

        public int addObject(PbObject obj)
        {
            m_baseData.Add(obj);
            return m_baseData.Count;
        }
        public void modifyObject(PbObject obj)
        {
            for (int i = 0; i < m_baseData.Count; i++)
            {
                PbObject po = m_baseData[i];
                if (po.id.Equals(obj.id))
                {
                    m_baseData[i] = obj;
                }
            }
        }

        public void removeObject(PbObject obj)
        {
            for (int i = 0; i < m_baseData.Count; i++ )
            {
                PbObject po = m_baseData[i];
                if(po.id.Equals(obj.id))
                {
                    m_baseData.RemoveAt(i);
                }
            }
        }


        public void loadTask()
        {
            m_task.Clear();
            if (File.Exists(sTaskFile) == false)
                return;

            string json = File.ReadAllText(sTaskFile);
            if (json.Length <= 0)
                return;

            JArray arTask = JArray.Parse(json);
            foreach(JObject task in arTask)
            {
                TaskItem item = new TaskItem();
                item.id = task["id"].ToString();
                item.dtBegin = Convert.ToDateTime(task["dtBegin"].ToString());
                item.dtEnd = Convert.ToDateTime(task["dtEnd"].ToString());
                item.duration = double.Parse(task["duration"].ToString());
                item.title = task["title"].ToString();


                m_task.Add(item);
            }
        }

        public void loadBaseData()
        {
            m_baseData.Clear();
            if (File.Exists(sBaseDataFile) == false)
                return;

            string json = System.IO.File.ReadAllText(sBaseDataFile);
            if (json.Length <= 0)
                return;

            JArray arObj = JArray.Parse(json);
            foreach(JObject obj in arObj)
            {
                PbObject po = new PbObject();
                po.id = obj["id"].ToString();
                po.ObjName = obj["ObjName"].ToString();

                JArray arMember = JArray.Parse(obj["listMember"].ToString());
                foreach (JObject objM in arMember)
                {
                    PbMember mem = new PbMember();
                    bool result = false;
                    bool bSuccess = bool.TryParse(objM["online"].ToString(), out result);
                    if (bSuccess)
                    {
                        mem.online = result;
                    }
                    mem.MemberName = objM["MemberName"].ToString();

                    JToken objTemp = objM["id"];
                    if(objTemp != null)
                    {
                        mem.id = objTemp.ToString();
                    }
                    

                    JArray arProperty = JArray.Parse(objM["listProperty"].ToString());
                    foreach (JObject objP in arProperty)
                    {
                        PbProperty pp = new PbProperty();

                        objTemp = objP["id"];
                        if(objTemp != null)
                        {
                            pp.id = objTemp.ToString();
                        }

                        objTemp = objP["pName"];
                        if(objTemp != null)
                        {
                            pp.pName = objTemp.ToString();
                        }

                        objTemp = objP["value"];
                        if (objTemp != null)
                        {
                            pp.value = objTemp.ToString();
                        }

                        objTemp = objP["type"];
                        if (objTemp != null)
                        {
                            pp.type = objTemp.ToString();
                        }


                        result = false;
                        bSuccess = bool.TryParse(objP["bEveryDay"].ToString(), out result);
                        if (bSuccess)
                        {
                            pp.bEveryDay = result;
                        }

                        bSuccess = bool.TryParse(objP["bWorkdayOnly"].ToString(), out result);
                        if (bSuccess)
                        {
                            pp.bWorkdayOnly = result;
                        }

                        bSuccess = bool.TryParse(objP["bSpecial"].ToString(), out result);
                        if (bSuccess)
                        {
                            pp.bSpecial = result;
                        }

                        //bSuccess = bool.TryParse(objP["bCanOverlap"].ToString(), out result);
                        //if (bSuccess)
                        //{
                        //    pp.bCanOverlap = result;
                        //}

                        //bSuccess = bool.TryParse(objP["online"].ToString(), out result);
                        //if (bSuccess)
                        //{
                        //    pp.online = result;
                        //}
                        mem.listProperty.Add(pp);
                    }
                    po.listMember.Add(mem);
                }
                m_baseData.Add(po);
            }

        }

        public void saveBaseData()
        {
            string json = JsonConvert.SerializeObject(m_baseData);

            File.Delete(sBaseDataFile);

            FileStream fs = new FileStream(sBaseDataFile, FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(fs);
            sw.Write(json);
            sw.Flush();
            sw.Close();
            fs.Close();
        }


        public void saveTask()
        {
            string json = JsonConvert.SerializeObject(m_task);

            File.Delete(sTaskFile);

            FileStream fs = new FileStream(sTaskFile, FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(fs);
            sw.Write(json);
            sw.Flush();
            sw.Close();
            fs.Close();
        }


    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值