JSON поле доступа как разные схемы - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть следующие JSON определения:

    public class Msg
    {
        [JsonProperty(PropertyName = "commandId")]
        public int CommandId { get; set; }
        [JsonProperty(PropertyName = "id")]
        public int Id { get; set; }
        [JsonProperty(PropertyName = "params")]
        public JnoParams Parameters = new JnoParams();
    }


    public class Res_Msg
    {        
        [JsonProperty(PropertyName = "commandId")]
        public int CommandId { get; set; }
        [JsonProperty(PropertyName = "id")]
        public int Id { get; set; }
        [JsonProperty(PropertyName = "params")]
        public Dev_Result Parameters = new Dev_Result();
    }

Свойство "params" имеет различные определения JSON, в первом это пустая структура, во втором оно содержит поля с значения, возвращаемые устройством. Когда WebSocket возвращает пакет приложению, я определяю, что делать, основываясь на двух полях «commandId» и «id», и пытаюсь развернуть «params» с другим определением структуры в зависимости от значений в commandId и id. Если бы мне пришлось использовать простой старый язык 'c', я бы использовал объединение, но я использую определения JSON. Как я могу сказать C#, что «params» относится к одному типу, а не к другому, и, следовательно, получить доступ к его полям соответственно? Я думал, что смогу преобразовать из type1 в type2 или как-то разыграть его, но пока что безуспешно. Большое спасибо за любую подсказку.

1 Ответ

0 голосов
/ 29 апреля 2020

Хорошо; очевидно, мне не нужно было определять каждую возможную структуру JSON, чтобы извлечь из них значения. Я определил JSON для тех структур, которые собирался использовать, и внутри этих структур я определил только те поля, которые меня интересуют. После десятилетий, потраченных на описание структур, которые должны были быть точно определены как различные поля с точки зрения типа и размера Это освежающее чувство, когда я вижу, что все, что мне действительно нужно, это определить тип пакета JSON и имя и тип содержащегося в нем поля, которое я хочу извлечь, чтобы JSON нашел и возвратил это, без необходимости определять в структуре JSON все поля до или после.

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