Я нашел этот ответ весьма полезным, но 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
Использование Newtonsoft.Json для десериализации массива строк по сравнению с массивом массива строк в одной и той же по ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Newtonsoft.Json.Schema неправильно проверяет полезную нагрузку JSON по схеме JSON.
Anonymous » » в форуме C# - 0 Ответы
- 67 Просмотры
-
Последнее сообщение Anonymous
-