Member 13677196 Ответов: 2

Как проверить, существует ли var allinterconnect или нет.


TextLog.log(" получение данных InterConnect Bay из OneView "+ con.oneViewIP + " инициировано");
Список<класс IDictionary&ЛТ;строку, строку&ГТ;&ГТ; OVList = новый список<класс IDictionary&ЛТ;строку, строку&ГТ;&ГТ;();
Список<класс IDictionary&ЛТ;строку, строку&ГТ;&ГТ; NetworkList = новый список<класс IDictionary&ЛТ;строку, строку&ГТ;&ГТ;();

var allinterconnect = getAllData("https://" + con.oneViewIP + "/rest/interconnects", con)["члены"];
и требуемая функция getalldata-

public static JObject getAllData(string url, Connection conn)
{
AllJsonData создание экземпляра = новое создание экземпляра();
Варе данных tempdata = CallRestApi(URL-адрес, "вам", соед.код сеанса, штат Коннектикут.xApiVersionString);
ВАР dictKeys = данных tempdata.Properties().Select(p => p.Name).Список();
если (диктует.Содержит("всего") && диктофоны.Содержит("count"))
{
ВАР tempDataTotal = int32 значение.Синтаксический анализ(данных tempdata["общий"].Метод toString());
ВАР tempDataCount = int32 значение.Синтаксический анализ(данных tempdata["количество"].Метод toString());
if (tempDataTotal == tempDataCount)
возврат tempData;
var perPageCount = (tempDataCount < tempDataTotal) ? tempDataCount : tempDataTotal;
int loopCount = (int)математика.Потолок((двухместная)tempDataTotal / (двуспальная)tempDataCount);
allJsonData = данных tempdata;
for (int i = 1; i < loopCount; i++)
{
var tempMembers = CallRestApi(url + "?start=" + (i * perPageCount).ToString() + "&count=" + perPageCount.ToString(), "GET",
conn.sessionID, conn.xApiVersionString)["члены"];
allJsonData["сотрудники"] = (allJsonData["сотрудники"].ToString() + ", " + tempMembers.Метод toString()).Метод toString();
}
allJsonData["count"] = tempDataCount;
allJsonData["сотрудники"] = создание экземпляра.Синтаксический анализ(allJsonData["сотрудники"].Метод toString());
}
еще
{
allJsonData = данных tempdata;
}
вернуть allJsonData;
}

Что я уже пробовал:

вот мы и подобрались OneView на ИС ,для каждого IP-адреса ,мы пытаемся вывезти его свойства.как поставить оператор if для var allinterconnect, т. е. если uri-"/rest/interconnects" существует или нет.При использовании var allinterconnect,используя getalldata, он дает следующую ошибку-Ошибка чтения JObject из JsonReader. Текущий элемент JsonReader не является объектом: StartArray. Путь ", строка 1, Позиция 1.
Ошибка находится в строке getalldata-
allJsonData["сотрудники"] = создание экземпляра.Синтаксический анализ(allJsonData["сотрудники"].Метод toString());
пожалуйста, помогите мне.

Richard MacCutchan

Проверьте ответ от звонка до звонка. getAllData; не просто предполагайте, что это работает.

Jochen Arndt

Это похоже на ваш вопрос https://www.codeproject.com/Questions/1235722/I-tried-to-check-if-allinterconnectmembers-is-empt

И на него все равно нельзя ответить, не зная, какой тип возвращается функцией getAllData() и что происходит, когда вызов завершается неудачей.

#realJSOP

Вот почему я рассматриваю возможность использования var типы как зло. Если вы хотите использовать язык без типов, переключитесь на VB.

2 Ответов

Рейтинг:
6

#realJSOP

Используя свои безумные навыки предсказания:

if (allinterconnect != null)
{
    foreach(var eachinterconnect in allinterconnect)
    {
        // do whatever you need to do with eachinterconnect
    }
}


Рейтинг:
16

Jochen Arndt

Вы обновили свой вопрос с помощью

Цитата:
При использовании var allinterconnect,используя getalldata, он дает следующую ошибку-Ошибка чтения JObject из JsonReader. Текущий элемент JsonReader не является объектом: StartArray. Путь ", строка 1, Позиция 1.
Таким образом, ошибка возникает в getAllData() функция, которая, кажется, использует Json.NET.

Для получения справки здесь требуется, чтобы вы показали нам исходный код этой функции.


Member 13677196

Это необходимый код getalldata-
public static JObject getAllData(string url, Connection conn)
{
AllJsonData создание экземпляра = новое создание экземпляра();
Варе данных tempdata = CallRestApi(URL-адрес, "вам", соед.код сеанса, штат Коннектикут.xApiVersionString);
ВАР dictKeys = данных tempdata.Properties().Select(p => p.Name).Список();
если (диктует.Содержит("всего") && диктофоны.Содержит("count"))
{
ВАР tempDataTotal = int32 значение.Синтаксический анализ(данных tempdata["общий"].Метод toString());
ВАР tempDataCount = int32 значение.Синтаксический анализ(данных tempdata["количество"].Метод toString());
if (tempDataTotal == tempDataCount)
возврат tempData;
var perPageCount = (tempDataCount < tempDataTotal) ? tempDataCount : tempDataTotal;
int loopCount = (int)математика.Потолок((двухместная)tempDataTotal / (двуспальная)tempDataCount);
allJsonData = данных tempdata;
for (int i = 1; i < loopCount; i++)
{
var tempMembers = CallRestApi(url + "?start=" + (i * perPageCount).ToString() + "&count=" + perPageCount.ToString(), "GET",
conn.sessionID, conn.xApiVersionString)["члены"];
allJsonData["сотрудники"] = (allJsonData["сотрудники"].ToString() + ", " + tempMembers.Метод toString()).Метод toString();
}
allJsonData["count"] = tempDataCount;
allJsonData["сотрудники"] = создание экземпляра.Синтаксический анализ(allJsonData["сотрудники"].Метод toString());
}
еще
{
allJsonData = данных tempdata;
}
вернуть allJsonData;
}

#realJSOP

Поместите блок try/catch вокруг вашего кода в этом методе. Вы, вероятно, узнаете, что именно не так. Моя первая догадка заключается в том, что вызов JObject.Parse ищет ключ ("члены"), который не существует или каким-то образом искажен. УЗНАЙТЕ, КАК ИСПОЛЬЗОВАТЬ ОТЛАДЧИК.

Jochen Arndt

Вы должны выяснить, где происходит ошибка (например, запустив свое приложение шаг за шагом в отладчике).
Вы также должны проверить возвращаемые значения, такие как tempData, на наличие NULL перед их использованием.

Я не знаю Джсона.NET но эта строка (и предшествующее ей создание allJsonData["members"]) выглядит подозрительно:
allJsonData["members"] = JObject.Parse(allJsonData["members"].ToString());