#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.