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();
}
}
}
C#中单实例demo,读写json文件并解析后保存数据到内存中
最新推荐文章于 2024-07-08 16:38:54 发布