【问题标题】:Portable class library object properties cannot be evaluated无法评估可移植类库对象属性
【发布时间】:2017-01-28 12:36:16
【问题描述】:

我在序列化 pcl 类对象时遇到问题,因为无法评估类对象属性。我的解决方案结构包含三个项目 -

  1. Xamarin.Android、参考服务和 Dto
  2. PCL(用于服务),参考 Dto(目标框架:.Net Framework 4.5、ASP.Net Core 1.0、Windows 8、Windows Phone 8.1、Xamarin.Android、Xamarin.iOS、Xamarin.iOS(Classic)
  3. PCL(用于 Dto))(目标框架:.Net Framework 4.5、ASP.Net Core 1.0、Windows 8、Windows Phone 8.1、Xamarin.Android、Xamarin.iOS、Xamarin.iOS(Classic)

我的服务类中有一种方法,例如 -

public async Task<HttpResponseMessage> SignIn(string username, string password)
{
    var user = new Dto.UserLogin(username, password);
    var serialize = Newtonsoft.Json.JsonConvert.SerializeObject(user);
    var content = new StringContent(serialize);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    HttpResponseMessage response = null;

    using (var client = GetClient("{urlhere}", username, "POST"))
    {
        response = await client.PostAsync("api/{methodname}", content);
    }

    return response;
}

上面的代码不会抛出错误,并且可以实例化“用户”变量。然而问题是当序列化行发生时,它什么都不序列化。似乎“用户”对象无法访问或显示“电子邮件”和“密码”这两个属性。但我可以使用“user.Email”在调试中访问它们。我附上了它的截图。

电子邮件和密码属性是公开的。

谢谢, 马文

【问题讨论】:

  • 您是否检查过链接器设置是否有影响?尝试关闭链接器进行测试。还要检查您尝试序列化的对象上是否有默认的无参数构造函数。
  • @Jack,谢谢!是的,链接器有所作为。目前我的调试和发布模式链接器设置设置为“SDK 和用户程序集”。如果我将其放回“无”,它将起作用。我是 xamarin 开发的新手,确切地说是 1 周。我不完全理解链接器设置以及在调试和发布中应该使用什么。你能告诉我更多吗?不过我不需要无参数构造函数。

标签: xamarin xamarin.android portable-class-library


【解决方案1】:

@Jack 的评论帮助我找出了罪魁祸首。在 Xamarin.Android 属性设置->Android 选项->链接器中,当前设置为“SDK 和用户程序集”。我将其更改为“仅 SDK 程序集”,这解决了问题。

【讨论】:

  • 链接器分析您的代码并从您的项目中删除 "unused" 类/方法。这个想法是减少应用程序的文件大小。不幸的是,有时链接器会删除实际需要的代码,例如剥离看似未使用的无参数构造函数..
猜你喜欢
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多