Передача значений в intent с помощью JSON

#xamarin.forms

#xamarin.forms

Вопрос:

я пытаюсь передать значение с помощью Newtonsoft.Json из общего проекта в проект droid. Итак, в моем общем проекте я сериализую объект следующим образом и получаю определенный результат, также отображаемый ниже. Затем я переношу этот результат в проект droid и пытаюсь десериализовать значение, однако я получаю исключение, также отображаемое ниже

Мой проект

  public void PushDictionary(List<Word> allWordsOfUserForAutomat)
        {
            var second = new Intent(MainActivity.Instance, typeof(LockScreenDictionary));
           
            second.PutExtra("MyData", JsonConvert.SerializeObject(allWordsOfUserForAutomat));
            var result = JsonConvert.SerializeObject(allWordsOfUserForAutomat);

            Console.WriteLine(result);
            MainActivity.Instance.StartActivity(second);
        }
  

Результат моего результата из json здесь « [{"Id":3391,"SentenceId":40616,"TextEng":"expensive","Explanation":"expensive (price)","GrammarDetail":null,"DateToShow":"0001-01-01T00:00:00"}]"

Мой дроид

   var allWordsOfUserForAutomat = JsonConvert.DeserializeObject<Word>(Intent.GetStringExtra("MyData"));
            List<Word> _allWordsOfUserForAutomat = null;
            _allWordsOfUserForAutomat.Add(allWordsOfUserForAutomat);
            LangUpDictionaryPlayer.PlayAutomat(_allWordsOfUserForAutomat);
          
  

Однако я получаю это исключение, может кто-нибудь, пожалуйста, посоветовать мне

 Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'AT.Model.Word' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
  

Ответ №1:

вы сериализуете СПИСОК слов

 var result = JsonConvert.SerializeObject(allWordsOfUserForAutomat);
  

затем вы пытаетесь десериализовать ОДНО слово

 var allWordsOfUserForAutomat = JsonConvert.DeserializeObject<Word>(Intent.GetStringExtra("MyData"));
  

вместо этого десериализуйте СПИСОК

 var allWordsOfUserForAutomat = JsonConvert.DeserializeObject<List<Word>>(Intent.GetStringExtra("MyData"));
  

обратите внимание, что исключение точно сообщает вам, что нужно сделать, чтобы исправить это

Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {«name»:»value»}), либо измените десериализованный тип на массив или тип, который реализует интерфейс сбора (например, ICollection, IList), подобный списку, который может быть десериализован из массива JSON.