Как создать класс c # с возможностью сериализации в динамический объект json (например, datatables.net config)? - PullRequest
1 голос
/ 24 мая 2019

Я использую datatables.net для ASP.NET MVC и хотел бы создать имена классов DataTablesConfiguration, которые содержат все свойства datatables.net. Цель этого - вместо этого сконфигурировать свойства таблиц данных в View или JS-файле. Я могу сконфигурировать, установив свойства объекта DataTablesConfiguration в коде на стороне сервера, а затем сериализовать объект в объект json и передать в View. Таким образом, все настройки таблиц данных будут выполняться на стороне сервера.

Пример:

Я могу сделать это для настройки таблиц данных:

    DataTablesConfiguration config = new DataTablesConfiguration();
    config.ServerSide = true;
    config.Ajax.Url = "/Demo/LoadData";
    config.Columns.Add(new DataTablesColumn
            {
                Data = "CustomerID",
                AutoWidth = true,
                Header= "CustomerID",
                Name = "CustomerID"
            });

Проблема: Datatables имеет много свойств с динамическим типом. Пример: АВТОЗАПОЛНЕНИЯ : Может быть, это:

$('#myTable').DataTable( {
    autoFill: true
} );

Но иногда:

$('#myTable').DataTable( {
    autoFill: {
        alwaysAsk: true,
        columns: ':not(:last-child)'
    }
} );
And sometimes:
$('#myTable').DataTable( {
    autoFill: {
        alwaysAsk: true,
        columns: [0,1,2],
        enable: true
    }
} );

Кнопка : Может быть, это:

$('#myTable').DataTable( {
    buttons: [
        'copy', 'excel', 'pdf'
    ]
} );

Но через некоторое время:

$('#myTable').DataTable( {
    buttons: [
        {
            extend: 'copy',
            text: '<u>C</u>opy',
            key: {
                key: 'c',
                altKey: true
            },
            //and some other properties may appear here based on extend 
 property
        }
    ]
} );

Я имею в виду свойства в конфигурации datatables динамические. Итак, как описать их с помощью класса в коде C # и в состоянии затем сериализовать его в соответствии с данными, которые точно хочет получить. Я попробовал это:

public class DataTablesConfiguration
    {
        //Init default values base on datatables.net's reference
        public DataTablesConfiguration()
        {
            this.Buttons = new List<ButtonOption>();
        }

        [JsonProperty(PropertyName = "buttons")]
        public ICollection<ButtonOption> Buttons { get; set; }

        public string GetJsonConfig()
        {
            return JsonConvert.SerializeObject(this);
        }
    }

public class ButtonOption
    {
        public ButtonOption(string extend, string text)
        {
            this.Extend = extend;
            this.Text = text;
        }

        [JsonProperty(PropertyName = "extend")]
        public string Extend { get; set; }

        [JsonProperty(PropertyName = "text")]
        public string Text { get; set; }

        //How can I define all other properties here
    }

Но, похоже, это не очень хороший подход. Есть ли лучший способ сделать так, чтобы таблицы данных могли быть настроены на серверном коде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...