#c# #json #list #null #converters
#c# #json #Список #null #преобразователи
Вопрос:
Во-первых, спасибо, что нашли время взглянуть на это. Это довольно много. Вопрос: Я в основном пытаюсь загрузить json в виде строки, а затем десериализовать его в список. Причина в том, что затем я могу вызвать определенное свойство этого списка (в моем случае «ips», потому что это все, что мне действительно нужно) и вставить его в таблицу, если требования выполнены. Проблема в том, что он перемещает все нулевые значения в массив. 114 столбцов null или пустой массив, и я не могу понять, почему? Я думаю, что прикреплю ссылку на JSON, потому что это огромный файл, он здесь https://endpoints.office.com/endpoints/Worldwide?clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7
Вот мой код:
- Средства получения и установки для JSON
public class GetSetJsonIP { [JsonProperty("id")] public int id { get; set; } [JsonProperty("serviceArea")] public string ServiceArea { get; set; } [JsonProperty("serviceAreaDisplayName")] public string ServiceAreaDisplayName { get; set; } [JsonProperty("urls")] public IList<string> urls { get; set; } [JsonProperty("ips")] public IList<string> ips { get; set; } [JsonProperty("tcpPorts")] public string tcpPorts { get; set; } [JsonProperty("expressRoute")] public bool expressRoute { get; set; } [JsonProperty("category")] public string category { get; set; } [JsonProperty("required")] public bool required { get; set; } [JsonProperty("notes")] public string notes { get; set; } [JsonProperty("udpPorts")] public string udpPorts { get; set; } }
- Класс списка
public class ConvertJsonIP{
public List<GetSetJsonIP> jsonIpConvert { get; set; }
public List<GetSetJsonIP> jsonIPConvert = new List<GetSetJsonIP>();
}
3. Я загружаю JSON, используя пустую строку с именем o365IP
o365IP = wc.DownloadString(wc.BaseAddress "/endpoints/Worldwide?clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7");
- Я десериализую использование моего списка в отдельный var
var o365IpVerion = JsonConvert.DeserializeObject<List<ConvertJsonIP>>(o365IP);
Этот код не показывает ошибок. поэтому я могу только предположить, что это логично с моей стороны. Следует отметить, что мне пришлось поставить
Серьезно, я застрял на этом в течение 3 дней, поэтому буду признателен за любую помощь в этом! Заранее спасибо!
Комментарии:
1. Если кто-то не сможет перейти по ссылке, я опубликую весь JSON. Просто не хотел ослеплять кого-либо, просматривающего около 600 строк JSON .. Также, если кто-нибудь знает способ использовать только часть JSON, например, в моем случае мне нужны только значения для id: 1, включая URL и ip, я буду очень признателен
2. Как называется класс под номером 1.
3. @Jawad Извините, должно быть, пропустил это .. Имя ‘GetSetJsonIP’
4. @Jawad и имя для класса 2 — ‘ConvertJsonIP’
Ответ №1:
json, который у вас есть, представляет собой список объектов, и каждый из этих объектов соответствует GetSetJsonIp
. Вы должны десериализовать с помощью List<GetSetJsonIP>
var o365IpVerion = JsonConvert.DeserializeObject<List<GetSetJsonIP>>(o365IP);
Комментарии:
1. БОЛЬШОЕ вам спасибо! честно говоря, я не могу сказать этого достаточно. 3 дня я застрял на этом, и все это время это было так! Еще раз, спасибо. Я думаю, что это та вещь, когда вы смотрите на код так много, что ваш мозг просто немеет к нему
Ответ №2:
public class GetJsonIP
работает нормально.
Причина, по которой вы должны Deserialize
ввести a List<>
, заключается в том, что объект json начинается со скобки, делающей весь объект List
или array
.
var O365IpVersion = JsonConvert.DeserializeObject<List<GetJsonIP>(O365IP);
Существуют различные способы получения значения определенного свойства. Если вам просто нужно ips
и вы хотите проверить значение, а затем обновить его, тогда вы могли бы выполнить цикл:
JArray arr = JArray.Parse(O365IP);
foreach (JObject obj in arr.Children<JObject>())
{
foreach (JPRoperty prop in obj.Properties().Where(x => x.Name == "ips"))
{
//use prop.Value and perform tasks
}
}
Или просто зацикливайтесь вот так:
for (int i = 0; i < O365IpVersion.Count; i )
{
//use O365IpVersion.ElementAt(i).ips
Комментарии:
1. Привет. Я должен сказать, что я никогда даже не думал делать это. В настоящее время я изменяю свой код, потому что это в 10 раз снизило мою эффективность. Большое вам спасибо! Я сейчас стажер, поэтому новичок в stack overflow, иначе я бы проголосовал за это!
2. Спасибо, но вы имеете в виду, что этот код, который я опубликовал, «снизил эффективность в 10 раз»? ` Что именно снижает эффективность?