首页 > 解决方案 > 动态设置 JSON 结果的 JsonPropertyOrder

问题描述

我正在使用 angular9 和 .net MVC API 开发一个小型应用程序。

从角度前端,用户可以从下拉列表中选择表名。选择表名后,它会显示该表中可用的所有列。用户可以选择他/她感兴趣的列名以及这些列的排序顺序。这将保存在数据库表中。例如,用户选择 Emp_Name(排序顺序 2)、Emp_Id(排序顺序 1)和 Emp_Address(排序顺序 3)

我想返回一个带有选定列名作为属性的 json,这些属性应该具有与用户偏好相同的排序顺序。JsonPropertyOrder 不能使用,因为属性的顺序是动态的并且可能会改变。

下面是我的代码,它返回 JSON,属性顺序为 Emp_Name、Emp_Id 和 Emp_Address。

 var model = ConvertDataTable<Employee>(dt);
 var serilaizeJson = JsonConvert.SerializeObject(model , Formatting.None,
 new JsonSerializerSettings
 {
     NullValueHandling = NullValueHandling.Ignore
 });
                        .
                        .
                        .
private static List<T> ConvertDataTable<T>(DataTable dt)
    {
        List<T> data = new List<T>();
        foreach (DataRow row in dt.Rows)
        {
            T item = GetItem<T>(row);
            data.Add(item);
        }
        return data;
    }
    private static T GetItem<T>(DataRow dr)
    {
        Type temp = typeof(T);
        T obj = Activator.CreateInstance<T>();

        foreach (DataColumn column in dr.Table.Columns)
        {
            foreach (PropertyInfo pro in temp.GetProperties())
            {
                if (pro.Name == column.ColumnName)
                    //if(dr[column.ColumnName] != null && dr[column.ColumnName] != DBNull.Value)
                        pro.SetValue(obj, dr[column.ColumnName].ToString(), null);
                else
                    continue;
            }
        }
        return obj;
    }

我希望订单是 Emp_Id、Emp_Name 和 Emp_Address

标签: jsonasp.net-mvcasp.net-web-apijson.netangular9

解决方案


推荐阅读