JsonSerializationException «Невозможно найти конструктор» в Xamarin.Android со стандартной библиотекой .NET - PullRequest
0 голосов
/ 04 октября 2018

Я использовал Xamarin Native UI для приложения Android и создал другую библиотеку классов для вызова API и данных. Десериализуем данные API, используя Newtonsoft.Json.

Эта библиотека классов Target Framework имеет значение .NET Standar 2.0.

Поскольку я добавил эту ссылку на консольное приложение, чтобы она работала нормально, но такую ​​же ссылку я добавил в проект Android, ее ошибка выброса.

**Error Details** Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute.

Согласно сообщению об ошибке, я использовал атрибут JsonConstructor для конструктора класса по умолчанию.

Пример:

public class TestClass
{
    [JsonConstructor]
    public TestClass()
    {

    }
}

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

В качестве PreserveAttribute требуется Mono.Android.dll или ссылка «Xamarin.iOS.dll», но моя библиотека классов является общей для обоих, поэтому это невозможно

ДобавитьPreserveAttribute class для вашей библиотеки классов и используйте этот атрибут, так как Mono Linker использует только «имя» атрибута, а не пространство имен / classname ...

public sealed class PreserveAttribute : Attribute
{
    public bool AllMembers;
    public bool Conditional;
    public PreserveAttribute (bool allMembers, bool conditional)
    {
        AllMembers = allMembers;
        Conditional = conditional;
    }
    public PreserveAttribute ()
    {
    }
}

И затем используйте этот атрибут на вашемМодель / класс JSON:

[Preserve(AllMembers = true)]
public class TestClass
{
  ~~~
0 голосов
/ 04 октября 2018

Попробуйте использовать PreserveAttribute в верхней части вашего класса

[PreserveAttribute(AllMembers = true)]
public class TestClass
{   
    public TestClass() {}

}

добавить еще один класс PreserveAttribute в библиотеку классов

public sealed class PreserveAttribute : System.Attribute
{
    public bool AllMembers;
    public bool Conditional;
}

Редактировать Связывание- SDK и пользовательские сборки

Пропустить связывание сборок- Newtonsoft.Json;

добавить Newtonsoft.Json в опцию Пропустить сборку

...