• C# 将任意对象快速转换为Json


    由于最近项目里面Model类特别多,而我需要编写所有数据交互的接口,传输的格式是json,以前都是通过循环List<T>中的对象向StringBuilder对象中Apped字符串生成json,而这样一来这次项目岂不是得写死人,想了想不能冒这个风险,因此觉得写一个通用的Model转json的方法如下:

    /// <summary>
    /// 转换T为json
    /// </summary>
    /// <typeparam name="T">类型</typeparam>
    /// <param name="model">对象</param>
    /// <returns>json</returns>
    private string ConvertToJson<T>(T model)
    {
        //获取属性集合
        PropertyInfo[] properties = model.GetType().GetProperties();
        StringBuilder sb = new StringBuilder();
        sb.Append("{");
       
      
    //遍历属性集合 for (int i = 0, len = properties.Length; i < len; i++) {
         if(0!=i)sb.Append(","); sb.AppendFormat(
    ""{0}":"{1}"", properties[i].Name.ToLower(),//属性名作为 键 properties[i].GetValue(model, null).ToString());//属性值作为 值
    } sb.Append(
    "}"); return sb.ToString(); }

    通过泛型可以接收任意自定义类型进行操作;

    完成了这个之后突然我又发现还是要循环很多List<T>,也很麻烦,所以干脆再重载一下,既可以直接转Model,也可以直接转List<Model>岂不是更加方便,于是(此处是完整代码):

    /// <summary>
    /// 转换List<T>为json
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="models"></param>
    /// <returns></returns>
    private string ConvertToJson<T>(List<T> models)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0, len = models.Count; i < len; i++)
        {
            if (0 != i)
                sb.Append(",");
            sb.Append(ConvertToJson(models[i]));
        }
        return sb.ToString();
    }
    
    /// <summary>
    /// 转换T为json
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="model"></param>
    /// <returns></returns>
    private string ConvertToJson<T>(T model)
    {
        //获取属性集合
        PropertyInfo[] properties = model.GetType().GetProperties();
        StringBuilder sb = new StringBuilder();
        sb.Append("{");//遍历属性集合
        for (int i = 0, len = properties.Length; i < len; i++)
        {
        if(0!=i)sb.Append(","); sb.AppendFormat(
    ""{0}":"{1}"", properties[i].Name.ToLower(),//属性名作为 键 properties[i].GetValue(model, null).ToString());//属性值作为 值
    } sb.Append("}"); return sb.ToString(); }

    至此完毕,代码中组织json格式效率方面还望有大神提出宝贵建议!

  • 相关阅读:
    【Linux笔记】Linux目录结构
    《Effective C#》快速笔记(五)-
    《Effective C#》快速笔记(四)- 使用框架
    《Effective C#》快速笔记(三)- 使用 C# 表达设计
    《Effective C#》快速笔记(二)- .NET 资源托管
    《Effective C#》快速笔记(一)- C# 语言习惯
    Visual Studio 数据库架构比较
    C# 反射与dynamic最佳组合
    C# 调用WebApi
    基于微软开发平台构建和使用私有NuGet托管库
  • 原文地址:https://www.cnblogs.com/mr-yoatl/p/8296971.html
Copyright © 2020-2023  润新知