C# LitJson新建Json字符串与Json数组, 或者读取

/// 
/// 新建全部值为null的Json对象并写入指定路径, 使用类中属性作为Key, 如果属性是一个类型, 那将作为Json的子集包括它, 但子类型不能继续含有子类型
/// 
/// Json对象的内容, 使用类型, 类型中的属性可以是一个类型
/// 如果需要保存文件, 输入保存的路径, 不包含文件名
/// 如果需要保存文件, 输入文件名, 不包含.json后缀
/// 如果类型内有子类型, 则在这输入子类型所在的命名空间
/// Json 字符串
public static string CreateJson<T>(string strSavePath = "", string strFilename = "", string strNamespace = "")
{
     
    try
    {
     
        JObject oJson = new JObject(); //新建Json对象
        Type jsonType = typeof(T); //获取T类型
        PropertyInfo[] propertys = jsonType.GetProperties(); //得到T类型中所有属性
        foreach (PropertyInfo item in propertys) //遍历属性
        {
     
            if (!string.IsNullOrEmpty(strNamespace)) //判断是否填写命名空间
            {
     
                // 获取命名空间
                // 获取当前的属性包括命名空间名
                // 通过获取到的命名空间中读取属性名, 命名空间下没有则返回null
                // 为null说明是值类型等基本类型或String, 对于它们直接创建
                //
                Assembly assembly = Assembly.Load(strNamespace);
                string strType = item.PropertyType.FullName;
                Type type = assembly.GetType(strType);
                if (type == null)
                    oJson.Add(new JProperty(item.Name, null));
                else
                {
     
                    JObject oChildJson = new JObject();
                    PropertyInfo[] propertyChildInfo = type.GetProperties();
                    foreach (PropertyInfo childItem in propertyChildInfo)
                    {
     
                        oChildJson.Add(new JProperty(childItem.Name, null));
                    }
                    oJson.Add(new JProperty(item.Name, oChildJson));
                }
            }
            else
                oJson.Add(new JProperty(item.Name, null));
        }
        string strJson = oJson.ToString(); //转换为String
        if (!string.IsNullOrEmpty(strSavePath)) //路径不为空, 则写文件
        {
     
            using (StreamWriter sw = new StreamWriter(Path.Combine(strSavePath, strFilename + ".json")))
            {
     
                sw.Write(strJson); //写入文件
            }
        }
        return strJson;
    }
    catch (Exception)
    {
     

        throw;
    }
}

/// 
/// 新建全部值为null的Json数组并写入指定路径, 使用类中属性作为Key, 如果属性是一个类型, 那将作为Json的子集包括它, 但子类型不能继续含有子类型
/// 
/// Json数组中一个对象的内容, 使用类型, 类型中的属性可以是一个类型
/// 数组的对象数量
/// 如果需要保存文件, 输入保存的路径, 不包含文件名
/// 如果需要保存文件, 输入文件名, 不包含.json后缀
/// 如果类型内有子类型, 则在这输入子类型所在的命名空间
/// Json 字符串数组
public static string CreateListJson<T>(int iJValue, string strSavePath = "", string strFilename = "", string strNamespace = "")
{
     
    try
    {
     
        JArray arrJson = new JArray(); //新建Json数组对象
        for (int i = 0; i < iJValue; i++)
        {
     
            JObject oJson = new JObject(); //新建Json对象
            Type jsonType = typeof(T); //获取T类型
            PropertyInfo[] propertys = jsonType.GetProperties(); //得到T类型中所有属性
            foreach (PropertyInfo item in propertys) //遍历属性
            {
     
                if (!string.IsNullOrEmpty(strNamespace)) //判断是否填写命名空间
                {
     
                    // 获取命名空间
                    // 获取当前的属性包括命名空间名
                    // 通过获取到的命名空间中读取属性名, 命名空间下没有则返回null
                    // 为null说明是值类型等基本类型或String, 对于它们直接创建
                    //
                    Assembly assembly = Assembly.Load(strNamespace);
                    string strType = item.PropertyType.FullName;
                    Type type = assembly.GetType(strType);
                    if (type == null)
                        oJson.Add(new JProperty(item.Name, null));
                    else
                    {
     
                        JObject oChildJson = new JObject();
                        PropertyInfo[] propertyChildInfo = type.GetProperties();
                        foreach (PropertyInfo childItem in propertyChildInfo)
                        {
     
                            oChildJson.Add(new JProperty(childItem.Name, null));
                        }
                        oJson.Add(new JProperty(item.Name, oChildJson));
                    }
                }
                else
                {
     
                    oJson.Add(new JProperty(item.Name, null));
                }
            }
            JToken jToken = (JToken)oJson; //将JObject转换为JToken给JArray添加
            arrJson.Add(jToken);
        }
        string strArrayJson = arrJson.ToString();
        if (!string.IsNullOrEmpty(strSavePath)) //路径不为空, 则写文件
        {
     
            using (StreamWriter sw = new StreamWriter(Path.Combine(strSavePath, strFilename + ".json")))
            {
     
                sw.Write(strArrayJson); //写入文件
            }
        }
        return strArrayJson;
    }
    catch (Exception)
    {
     

        throw;
    }
}

/// 
/// 读取Json文件
/// 
/// 文件所在路径
private static void EditJson(string strReadPath) 
{
     
    string strJson = File.ReadAllText(strReadPath);
    JObject oJson = new JObject();
    JToken jToken = JToken.Parse(strJson);
    switch (jToken.Type)
    {
     
        case JTokenType.Array: //Json数组属性
            foreach (var item in jToken)
            {
     
                
            }
            break;
        case JTokenType.Boolean:
            break;
        case JTokenType.Bytes:
            break;
        case JTokenType.Comment:
            break;
        case JTokenType.Constructor:
            break;
        case JTokenType.Date:
            break;
        case JTokenType.Float:
            break;
        case JTokenType.Guid:
            break;
        case JTokenType.Integer:
            break;
        case JTokenType.None:
            break;
        case JTokenType.Null:
            break;
        case JTokenType.Object: //Json字符串属性
            break;
        case JTokenType.Property:
            break;
        case JTokenType.Raw:
            break;
        case JTokenType.String:
            break;
        case JTokenType.TimeSpan:
            break;
        case JTokenType.Undefined:
            break;
        case JTokenType.Uri:
            break;
        default:
            break;
    }
}

你可能感兴趣的:(C#,Linq)