JsonSerializationException'无法在具有.NET标准库的Xamarin.Android上找到构造函数'

时间:2018-10-04 05:45:20

标签: c# xamarin xamarin.forms xamarin.android json.net

我已将Xamarin本机UI用于Android应用程序,并使用Newtonsoft.Json为API调用和数据创建了不同的类库。反序列化api数据。

该类库的目标框架为.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 :(得分:2)

  

其中需要PreserveAttribute作为Mono.Android.dll或'Xamarin.iOS.dll'的引用,但是这两个类的共同点是我的类库是通用的

在您的类库中添加一个PreserveAttribute类,并使用该属性,因为Mono Linker仅使用属性的“名称”,而不使用名称空间/类名...

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
{
  ~~~

答案 1 :(得分:1)

尝试在班级顶部使用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