Как получить данные из JSON в C #?

У меня возникла ваша проблема, и вот мой ответ:

prices = [5, 12, 45]
list=['1','2','3']

for i in range(1,3):
  vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])

, поэтому при печати:

price1 = 5 
price2 = 12
price3 = 45
0
задан Harshit 18 January 2019 в 11:48
поделиться

3 ответа

Самый простой способ - использовать DataContractJsonSerializer

Здесь вы можете прочитать больше об этом.

В общем, вам нужно создать модель, которая будет иметь тот же возможный результат, что и ваш JSON. Затем вы можете просто использовать DataContractJsonSerializer для создания объекта вашей модели с помощью MemoryStream.

Здесь вы можете найти хороший инструмент для создания модели из JSON. Например, этот:

public class Id
{
    public string _type { get; set; }
    public string Class { get; set; }
    public string RollId { get; set; }
}

public class Datum
{
    public string _type { get; set; }
    public string Class { get; set; }
    public Id Id { get; set; }
    public object Data { get; set; }
}

public class Elements
{
    public string _type { get; set; }
    public List<Datum> _data { get; set; }
}

public class Root
{
    public string _type { get; set; }
    public string Class { get; set; }
    public Elements Elements { get; set; }
}

public class RootObject
{
    public int encoding_version { get; set; }
    public Root root { get; set; }
}

Затем вы используете MemoryStream и DataContractJsonSerializer, чтобы создать объект из RootObject из этого JSON.

MemoryStream stream1 = new MemoryStream();  
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RootObject));  

stream1.Position = 0;  
RootObject rootObject = (RootObject)ser.ReadObject(stream1);

И да, как упоминает Adriani6 - ваш JSON недействителен:

"Data": {
            "_type": "p_model",
            "Class": ".key.Unsupported",
            "MType": ".TestMType",
            "Version": {
              "_type": "test__version",
              "Class": ".key.TestVersion",

            }

В конце есть ,, который не разрешен.

0
ответ дан bene_rawr 18 January 2019 в 11:48
поделиться

Во-первых, попытайтесь получить правильный правильно сформированный JSON. Вы можете использовать этот инструмент для украшения кода . Затем вы можете автоматически создать класс C #, используя json2csharp . Наконец, поскольку у вас есть класс C #, вы можете применить операторы if и проверить, имеет ли свойство значение null.

Сгенерированная оболочка C #:

public class Id
{
    public string _type { get; set; }
    public string Class { get; set; }
    public string RollId { get; set; }
}

public class Datum
{
    public string _type { get; set; }
    public string Class { get; set; }
    public Id Id { get; set; }
    public object Data { get; set; }
}

public class Elements
{
    public string _type { get; set; }
    public List<Datum> _data { get; set; }
}

public class Root
{
    public string _type { get; set; }
    public string Class { get; set; }
    public Elements Elements { get; set; }
}

public class RootObject
{
    public int encoding_version { get; set; }
    public Root root { get; set; }
}
0
ответ дан opewix 18 January 2019 в 11:48
поделиться

Если вы хотите выбрать только несколько полей из сложного JSON, вы можете использовать Cinchoo ETL - библиотеку с открытым исходным кодом

В приведенном ниже примере показано, как выбрать RollId и [112 ] значения из вашего json

using (var r = new ChoJSONReader("## YOUR JSON FILE PATH ##")
    .WithJSONPath("$.._data")
    .WithField("RollId", jsonPath: "$..Id.RollId", fieldType: typeof(string))
    .WithField("MType", jsonPath: "$..Data.MType", fieldType: typeof(string))
    )

{
    foreach (var rec in r)
    {
        Console.WriteLine((string)rec.RollId);
        Console.WriteLine((string)rec.MType);
    }
}

Надеюсь, это поможет.

0
ответ дан RajN 18 January 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: