У меня возникла ваша проблема, и вот мой ответ:
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
Самый простой способ - использовать 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",
}
В конце есть ,
, который не разрешен.
Во-первых, попытайтесь получить правильный правильно сформированный 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; }
}
Если вы хотите выбрать только несколько полей из сложного 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);
}
}
Надеюсь, это поможет.