Как преобразовать строку JSON в массив - PullRequest
0 голосов
/ 24 января 2019

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

[
   {
      "name":"Test diagnosis",
      "code":"324324",
      "table":"EXAMPLE",
      "addedby":"EDnurse",
      "dateadded":3243243,
      "qualifier":[
         {
            "name":"Qualifier",
            "value":"Confirmed Diagnosis",
            "code":"23434434",
            "prefix":"[C] "
         },
         {
            "name":"Left/Right",
            "value":"Bilateral",
            "code":"324343",
            "suffix":" - Bilateral"
         }
      ],
      "prefix":"[C] ",
      "suffix":" - Bilateral"
   }
]

Вы можете видеть, что поле Qualifier в этой строке JSON является вложенным и имеет 2 объекта.

Я работаю над пакетом, который анализирует эту строку JSON с использованием C # в SSIS. Я могу разобрать строку с одним объектом определителя, но когда я добавляю второй объект (влево / вправо) и пытаюсь превратить строку в массив, я получаю сообщение об ошибке.

Без массива (работает с одним объектом Qualifier):

Diagnosis diagnosis = js.Deserialize<Diagnosis>(reviewConverted);

С массивом (возвращает ошибку о том, что я не могу неявно преобразовать диагностику типа в диагностику типа):

Diagnosis diagnosis = js.Deserialize<List<Diagnosis>>(reviewConverted);

Я также использую следующий класс для определения моих полей диагностики:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SC_8aae662509ae4bab8491323924579173
{
    class Diagnosis
    {
        public string name { get; set; }
        public string code { get; set; }
        public string table { get; set; }
        public string addedby { get; set; }
        public string dateadded { get; set; }

        public qualifier Qualifier { get; set; }

        public string prefix { get; set; }
        public string suffix { get; set; }


    }
}

Вот мой классификатор:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SC_8aae662509ae4bab8491323924579173
{
    class qualifier
    {
        public string name { get; set; }
        public string value { get; set; }
        public string code { get; set; }
        public string prefix { get; set; }
    }
}

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Насколько я могу судить, исходя из того, что вы говорите, 1 объект диагностики может содержать несколько объектов квалификатора. Так что вам нужно сделать следующее: Во-первых, измените свой класс диагностики, чтобы иметь следующее свойство:

public qualifier List<Qualifier> { get; set; }

вместо

public qualifier Qualifier { get; set; }

Также следующее утверждение дает вам ошибку:

Diagnosis diagnosis = js.Deserialize<List<Diagnosis>>(reviewConverted);

Вы пытаетесь сохранить в объекте «Диагностика» объект «Список диагнозов», который, разумеется, не имеет смысла.

0 голосов
/ 24 января 2019

Вы пробовали, как показано ниже?

class Diagnosis
{
    public string name { get; set; }
    public string code { get; set; }
    public string table { get; set; }
    public string addedby { get; set; }
    public string dateadded { get; set; }

    public List<Qualifier> qualifier { get; set; }

    public string prefix { get; set; }
    public string suffix { get; set; }


}
...