Как обрабатывать как один элемент, так и массив для одного и того же свойства с использованием System.text.json?C#

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

Сообщение Anonymous »

Я пытаюсь покинуть какой -то JSON, который содержит значение, которое иногда является массивом, а иногда и одним элементом. Как я могу сделать это с помощью system.text.json и jsonserializer ? (Этот вопрос вдохновлен этим вопросом для json.net от Роберта Маклауса.)

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

[
{
"email": "john.doe@sendgrid.com",
"timestamp": 1337966815,
"category": [
"newuser",
"transactional"
],
"event": "open"
},
{
"email": "jane.doe@sendgrid.com",
"timestamp": 1337966815,
"category": "olduser",
"event": "open"
}
]
< /code>

И я хочу покинуть его в список следующего типа: < /p>

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

public List Category { get; set; }
}
< /code>

Использование следующего кода: < /p>

var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};
var list = JsonSerializer.Deserialize(json, options);
< /code>

Однако, когда я делаю, я получаю следующее исключение: < /p>


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)
< /code>
< /blockquote>

Исключение происходит потому, что значение «категории» < /code> иногда является единственной строкой, а иногда и массивом строк.  Как я могу покинуть такое свойство с System.text.json 
?


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

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

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

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

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

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