Использование Newtonsoft.Json для десериализации массива строк по сравнению с массивом массива строк в одной и той же поC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Использование Newtonsoft.Json для десериализации массива строк по сравнению с массивом массива строк в одной и той же по

Сообщение Anonymous »

Я нашел этот ответ весьма полезным, но dbc конкретно говорит:

Конвертер не применяется к спискам, элементы которых также сериализуются как коллекции. , например List

Проблема в том, что мне нужно десериализовать массив, который может быть массивом строк, или это может быть быть массивом массивов строк. Итак, в примере говорится, что в моем случае это не сработает.
Например,
{"values": [ "foo", "bar" ]}

против
{"values": [ [ "foo", "bar" ], [ "baz", "qux" ] ]}

Я думал о реализации собственного класса
public class SingleOrArray : ICollection
{
public bool IsArray { get; set; } = false;
public T Value { get; set; }

public T[] Values { get { return _items.ToArray() } }

private List _items = new();

// etc.
}

С десериализованным объектом, который выглядит следующим образом:
public class MyObject
{ [JsonConverter(typeof(SingleOrArrayCollectionConverter))]
public List Value { get; set; }
}

Но я не знаю, как реализовать JsonConverter, который справится с этим.
Вот мои модульные тесты, которые проходят успешно, но я нужно, чтобы он обрабатывал строку[] в этом случае:
[Fact]
public void SingleItemTest()
{
// Arrange
var testData = "{ \"value\": \"a\" }";

// Act
var target = JsonConvert.DeserializeObject(testData);

// Assert
Assert.False(target!.Value.IsArray);
Assert.Equal("a", target!.Value.Value);
}

[Fact]
public void ArrayItemTest1()
{
// Arrange
var testData = "{ \"value\": [\"a\"] }";

// Act
var target = JsonConvert.DeserializeObject(testData);

// Assert
Assert.True(target!.Value.IsArray);
Assert.Equal("a", target!.Value.Values[0]);
}


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

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

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

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

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

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

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