xamarin формирует ошибку, преобразуя значения "[json]" в список - PullRequest
0 голосов
/ 30 октября 2019

Я изучаю Xamarin для создания кроссплатформенных мобильных приложений. Чтобы получить данные с сервера SQL, я создал веб-API и разместил его в своей локальной сети. Я проверил его, и он работает отлично, как и ожидалось.

Редактировать-Добавлен Json Json

[{"Id":1,"FirstName":"D","LastName":"M","Company":"MD"},{"Id":2,"FirstName":"D","LastName":"S","Company":"DM"},{"Id":6,"FirstName":"MD","LastName":"","Company":"MD"},{"Id":8,"FirstName":"DM","LastName":"D","Company":""}]

В xamarin.forms У меня есть список, где я быдесериализовать JSON и назначить его как ItemsSource.

Проблема заключается в том, каким образом я пытаюсь десериализовать JSON, при конвертации выдается ошибка.

Редактировать IИспользовал атрибут DataContract только при попытке десериализации с помощью DataContractJsonSerializer.

Вот мой класс PO для JSON,

[DataContract]
public class Employee
{
    [DataMember]
    [JsonProperty("Id")]
    public int Id { get; set; }

    [DataMember]
    [JsonProperty("FirstName")]
    public string FirstName { get; set; }

    [DataMember]
    [JsonProperty("LastName")]
    public string LastName { get; set; }

    [DataMember]
    [JsonProperty("Company")]
    public string Company { get; set; }
}

Вот некоторые коды, которые использовались для десериализации JSON,

var response = await httpClient.GetAsync(Url);
if (response.IsSuccessStatusCode)
{
    var content = await response.Content.ReadAsStringAsync();
    var Employees = JsonConvert.DeserializeObject<Employee>(content);
    empListView.ItemsSource = Employees;
}
else
{
    await DisplayAlert("Failed", "Connection Failed", "OK");
}

Это привело к ошибке

Error Image

Чтобы исправить это, я изменил приведенный выше код как

List<Employee> Employees = JsonConvert.DeserializeObject<List<Employee>>(content);

Itпривел к той же ошибке, я попытался использовать массив,

Employee[] Employees = JsonConvert.DeserializeObject<Employee[]>(content);

В другом обсуждении, касающемся той же проблемы в этом переполнении стека, я нашел код и тоже попробовал,

using (var web = new WebClient())
{
    var response = web.DownloadString(Url);
    Employee[] emp;
    using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(response)))
    {
        var serializer = new DataContractJsonSerializer(typeof(Employee[]));
        emp = serializer.ReadObject(stream) as Employee[];
    }
    empListView.ItemsSource = emp;
}

, но этотоже не помогло. Может кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Я думаю, что проблема в JSON-строке из ответа, я предполагаю, что вы сериализуете объект в JSON, прежде чем возвращать его, API должен сериализовать объекты в JSON по умолчанию. Попробуйте просто вернуть объект из API.

0 голосов
/ 30 октября 2019

вместо:

List<Employee> Employees = JsonConvert.DeserializeObject<List<Employee>>(content);

Попробуйте:

List<Employee> Employees = JsonConvert.DeserializeObject<List<Employee>>(content.ToString());

Надеюсь, это поможет. Дайте мне знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...