Что вызывает JsonException: значение JSON не удалось преобразовать?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Что вызывает JsonException: значение JSON не удалось преобразовать?

Сообщение Anonymous »

C# 10/.NET 6/System.Text.Json
Я работаю с API, который возвращает ответ в формате JSON. Я пытаюсь использовать System.Text.Json для десериализации ответа JSON в класс. Я получаю исключение JsonException, и мне нужна помощь, чтобы понять, что я делаю неправильно.
Я вызываю API и сохраняю ответ JSON:

Код: Выделить всё

string json = await Retreive.Fetch(target);
Вот выходные данные Console.WriteLine(json):

Код: Выделить всё

[{"id": 1148082,"name": "TestGroup","group_type":"console_group","provisioning_guid": null,"member_count": 1,"current_risk_score": 36.3,"status": "active"},{"id": 1148788,"name": "Group2","group_type": "smart_group","provisioning_guid": null,"member_count": 9,"current_risk_score": 39.7,"status": "active"},{"id": 1148792,"name": "Group3","group_type": "smart_group","provisioning_guid": null,"member_count": 9,"current_risk_score": 39.7,"status": "active"}]
Если поможет, вот красиво напечатанная версия:

Код: Выделить всё

[
{
"id": 1148082,
"name": "TestGroup",
"group_type": "console_group",
"provisioning_guid": null,
"member_count": 1,
"current_risk_score": 36.3,
"status": "active"
},
{
"id": 1148788,
"name": "Group2",
"group_type": "smart_group",
"provisioning_guid": null,
"member_count": 9,
"current_risk_score": 39.7,
"status": "active"
},
{
"id": 1148792,
"name": "Group3",
"group_type": "smart_group",
"provisioning_guid": null,
"member_count": 9,
"current_risk_score": 39.7,
"status": "active"
}
]
Используя функцию «Вставить JSON как классы» Visual Studio 2022, я получаю следующую структуру классов:

Код: Выделить всё

public class Rootobject
{
public Class1[] Property1 { get; set; }
}

public class Class1
{
public int id { get; set; }
public string name { get; set; }
public string group_type { get; set; }
public object provisioning_guid { get; set; }
public int member_count { get; set; }
public float current_risk_score { get; set; }
public string status { get; set; }
}
Я пытаюсь: Корневой объект? gag = JsonSerializer.Deserialize(json);
Выдается исключение JsonException:

Код: Выделить всё

Unhandled exception. System.Text.Json.JsonException: The JSON value could not be converted to KB4.Rootobject. Path: $ | LineNumber: 0 | BytePositionInLine: 1.    at
System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)    at
System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1.OnTryRead(Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, ReadStack state, T value)    at
System.Text.Json.Serialization.JsonConverter`1.TryRead(Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, ReadStackstate, T value)    at
System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader reader, JsonSerializerOptions options, ReadStack state)    at
System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan`1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable`1 actualByteCount)    at
System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan`1 json, JsonTypeInfo jsonTypeInfo)    at
System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)    at KB4.Kb4.Main() in
C:\\Program.cs:line 188    at
KB4.Kb4.()
Некоторые вещи, которые я пробовал:
  • Изменение имени класса Rootobject на GetAllGroups
    Некоторые вещи, которые я пробовал:

    Изменение имени класса Rootobject на GetAllGroups
    code>
  • Полагая, что JSON в ответе может быть каким-то неверным, я вставил его в текстовый файл, загрузил JSON оттуда, а затем снова попытался десериализовать.
  • Просмотр десериализации Массив JSON в C#, но он использует JavaScriptSerializer.
Ни один из вышеперечисленных вариантов не дает другого результата.
Что такое Я делаю неправильно?

Подробнее здесь: https://stackoverflow.com/questions/710 ... -converted
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»