Динамически установите JsonPropertyOrder результата JSON

#json #asp.net-mvc #asp.net-web-api #json.net #angular9

Вопрос:

Я работаю над небольшим приложением, использующим angular9 и .net MVC API.

В интерфейсе angular пользователь может выбрать имя таблицы из выпадающего списка. Как только выбрано имя таблицы, в ней отображаются все столбцы, доступные в этой таблице. Пользователь может выбрать имена столбцов, которые его интересуют, а также порядок сортировки этих столбцов. Это будет сохранено в таблице базы данных. например, пользователь выбирает 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 amp;amp; dr[column.ColumnName] != DBNull.Value)
                        pro.SetValue(obj, dr[column.ColumnName].ToString(), null);
                else
                    continue;
            }
        }
        return obj;
    }
 

Я хочу, чтобы порядок был Emp_Id, Emp_Name и Emp_Address