Как исправить «Невозможно десериализовать текущий массив JSON в тип« пассажи », потому что для десериализации требуется объект JSON (например, {" name ":" value "}) - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь прочитать и получить доступ к большому файлу JSON из локального каталога, используя newtonsoft.json в c #, но всегда выдает ошибку.Я создал два класса для доступа к нему.Это мой пример данных JSON:

{
    "passages": [
        {
            "passage_text": "xxxxxxx",
            "url": "xxxxx",
        }
    ]
    "answer":"xxxxxx",
    "query_id":"Xxxxx"
}

вот код, который я пробовал:

public class collection
{
    public passages passages { get; set; }
    public String answers { get; set; }
    public String query_id { get; set; }
}

public class passages
{
    public String url { get; set; }
    public String passage_text { get; set; }
}

Вот часть, которую я пытался прочитать и получить доступ к файлу JSON:

String jsonPath = @"C:\Users\admin\Desktop\647\project\collection\sample_collection.json"  ;
var serializer = new JsonSerializer();
StreamReader sr = new StreamReader(jsonPath);
JsonTextReader reader = new JsonTextReader(sr);
reader.SupportMultipleContent = true;
while (reader.Read())
{
    if (reader.TokenType == JsonToken.StartObject)
    {
        collection c = serializer.Deserialize<collection>(reader);
        Console.WriteLine(c.passages.url);
     }
}

И это дало мне эту ошибку:

Newtonsoft.Json.JsonSerializationException: 'Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип' LuceneIndexApplication.пассажи, потому что тип требует JSON-объект (например, {"name": "value"}) для правильной десериализации.Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {"name": "value"}), либо измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), например List, который можетбыть десериализованным из массива JSON.JsonArrayAttribute также может быть добавлен к типу, чтобы принудительно десериализовать его из массива JSON.Путь '[0] .passages', строка 1, позиция 15. '

1 Ответ

2 голосов
/ 28 сентября 2019

вы пытаетесь отобразить отрывки из массива в список.

, поэтому все, что вам нужно изменить, это:

public class collection
    {
        public passages passages { get; set; }
        public String answers { get; set; }
        public String query_id { get; set; }
    }

должно быть

public class collection
    {
        public List<passages> passages { get; set; }
        public String answers { get; set; }
        public String query_id { get; set; }
    }

обратите внимание на Список в последнем.

...