Как обрабатывать один элемент и массив для одного и того же свойства с помощью System.Text.Json?C#

Место общения программистов C#
Ответить
Anonymous
 Как обрабатывать один элемент и массив для одного и того же свойства с помощью System.Text.Json?

Сообщение Anonymous »

Я пытаюсь десериализовать некоторый JSON, содержащий значение, которое иногда является массивом, а иногда и одним элементом. Как я могу сделать это с помощью System.Text.Json и JsonSerializer? (Этот вопрос навеян вопросом Роберта Маклоуза о Json.NET.)

Я получил следующий JSON:

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

[
{
"email": "john.doe@sendgrid.com",
"timestamp": 1337966815,
"category": [
"newuser",
"transactional"
],
"event": "open"
},
{
"email": "jane.doe@sendgrid.com",
"timestamp": 1337966815,
"category": "olduser",
"event": "open"
}
]
И я хочу десериализовать его в список следующего типа:

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

class Item
{
public string Email { get; set; }
public int Timestamp { get; set; }
public string Event { get; set; }

public List Category { get; set; }
}
Используя следующий код:

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

var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};
var list = JsonSerializer.Deserialize(json, options);
Однако при этом я получаю следующее исключение:

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

System.Text.Json.JsonException: The JSON value could not be converted to System.String. Path: > $[1].category | LineNumber: 13 | BytePositionInLine: 25.
at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
at System.Text.Json.JsonPropertyInfo.Read(JsonTokenType tokenType, ReadStack& state, Utf8JsonReader& reader)
at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& readStack)
at System.Text.Json.JsonSerializer.ReadCore(Type returnType, JsonSerializerOptions options, Utf8JsonReader& reader)
at System.Text.Json.JsonSerializer.Deserialize(String json, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)

Исключение возникает, поскольку значение «категория» иногда представляет собой одну строку, а иногда и массив строк. Как я могу десериализовать такое свойство с помощью System.Text.Json?


Подробнее здесь: https://stackoverflow.com/questions/594 ... ing-system
Ответить

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

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

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

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

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