C# + IOptions <T>- десериализовать части вложенных и очень динамичных c конфигураций в виде строки? - PullRequest
0 голосов
/ 23 января 2020

Есть ли способ десериализации частей конфигурации базового приложения ASP. NET в виде строки со средствами, заданными конфигурацией IOptions (of T) / MS для примера, показанного ниже?

In мое мнение и то, что я пробовал до сих пор, кажется более сложным, чем примеры, которые я мог найти в Интернете, только из-за вложенного и динамического c содержимого атрибутов .

Пример для конфигурации:

**Example config**

{
  "Workflow": {
    "ActionContentDefinitions": [
      {
        "Key": {
          "State": "1", // New
          "Trigger": "100" // Trigger1
        },
        "Content": [
          {
            "Identifier": "Workflow.Permanent.New.Trigger1.Select.PopMusic",
            "Type": "2", // Select
            "NameTranslationId": "ClientStrings.Workflow.New.Trigger1.Select.PopMusic.Name",
            "DescriptionTranslationId": "ClientStrings.Workflow.New.Trigger1.Select.PopMusic.Description",
            "Attributes": {
              "required": true,
              "bindValue": "value",
              "items": [
                {
                  "value": "Test",
                  "label":  "TEST"
                },
                {
                  "value": "ha",
                  "label": "HAHA"
                }
              ]
            },
            "Order": "0"
          },
          {
            "Identifier": "Workflow.Permanent.New.Trigger1.Textbox.FavMusic",
            "Type": "0", // Textbox
            "NameTranslationId": "ClientStrings.Workflow.New.Trigger1.Textbox.FavMusic.Name",
            "DescriptionTranslationId": "ClientStrings.Workflow.New.Trigger1.Textbox.FavMusic.Description",
            "Attributes": {
              "required": true              
            },
            "Order": "1"
          }
        ]
      }      
    ]
  }
}

Мы пытались использовать разные типы для атрибутов (см. Ниже класс раздела), но в большинстве случаев десериализация возвращает нулевое значение для атрибутов или даже приводит к пустой коллекции содержания.

**Relevant section class**

public class ActionContent
{
    public string Identifier { get; set; }

    public WorkflowControlType Type { get; set; }

    public string NameTranslationId { get; set; }

    public string DescriptionTranslationId { get; set; }

    public string Default { get; set; }

    public int Order { get; set; }

    public string Attributes { get; set; }

    // public object Attributes { get; set; }

    // public dynamic Attributes { get; set; }

    // public IDictionary<string, object> Attributes { get; set; }

    // public ActionContentAttributes Attributes { get; set; }
}

Последнее, что мы на самом деле хотим сделать, - это определить каждую возможную запись в Атрибуты как свой собственный класс / раздел. Строки будет достаточно, мы просто передадим эту информацию в другую систему.

Заранее спасибо,

Майкл

...