【问题标题】:JsonConvert.DeserializeObjects does not work after Linking SDK and User Assemblies链接 SDK 和用户程序集后,JsonConvert.DeserializeObjects 不起作用
【发布时间】:2016-05-10 20:40:14
【问题描述】:

当 Linking 设置为 SDK Assemblies Only 时,JsonConvert.DeserializeObjects 方法有效,但是当我使用 Linker Properties 中的 Link SDK 和 User Assemblies 选项构建项目时,它不起作用,它在所有字段中返回 null反序列化的对象。

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    您需要将[Preserve(AllMembers = true)] 属性放在任何动态生成的类上。这将防止它们被剥离。

    您可以在iOS linker here 上阅读更多信息。

    假设您当前有一个要反序列化的用户列表,您可以这样说。

    var user = JsonConvert.DeserializeObject<User>(json);
    

    在您的 User 类中,您需要将属性放在该类上。

    [Preserve(AllMembers = true)]
    public class User{
      public string Email { get; set; }
      public string FirstName { get; set; }
      public string Lastname { get; set; }
    }
    

    【讨论】:

    • 感谢@Andres,但 Newtonsoft 是一个库,我无法在其中添加 Preserve Attribute。问题出在 Newtonsoft 库中 JsonConvert 类的 DeserializeObjects 方法中。我希望你明白我的意思。
    • @AkashAmin 您没有将 Preserve 属性放在 Newtonsoft 库中。你把它放在你想要反序列化的类上。我在答案中添加了一个示例。
    • 谢谢@Andres,它解决了我的问题。我认为链接器会从库中剥离代码,从没想过它也会剥离我的模型。我看到我的模型中的差异字段被剥离,因此反序列化没有发生。现在它的工作。
    • 如果还是不行,也可以在调用JsonConvert.DeserializeObject的类中添加[Preserve(AllMembers = true)]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2014-09-18
    相关资源
    最近更新 更多