【问题标题】:Xamarin.ios - Using NBuilder to build mocks throws TypeCreationExceptionXamarin.ios - 使用 NBuilder 构建模拟抛出 TypeCreationException
【发布时间】:2016-05-19 16:28:18
【问题描述】:

我正在使用 NBuilder 库来构建模拟 http 响应,在 Android 中一切正常,但在 iOS 中,每次我想构建模型类时都会触发此异常。

“FizzWare.NBuilder.TypeCreationException”,它说我的 X 模型类没有无参数构造函数,实际上有!例如这个模型类:

public class Actor
    {
        public Actor() {
        }



        [JsonProperty("authorities")]
        public List<Authority> Authorities { get; set; }
        [JsonProperty("imageDerivatives")]
        public ImageDerivatives ImageDerivatives { get; set; }
        [JsonProperty("profileFileId")]
        public PictureFile ProfilePicture { get; set; }
        [JsonProperty("role")]
        public Role Role { get; set; }
        [JsonProperty("roleId")]
        public int RoleId { get; set; }
        [JsonProperty("status")]
        public bool Status { get; set; }
        [JsonProperty("updatedAt")]
        public DateTime UpdatedAt { get; set; }
        [JsonProperty("username")]
        public string Username { get; set; }
        [JsonProperty("createdAt")]
        public DateTime CreatedAt { get; set; }
        [JsonProperty("departmentId")]
        public int DepartmentId { get; set; }
        [JsonProperty("email")]
        public string Email { get; set; }
        [JsonProperty("firstName")]
        public string FirstName { get; set; }
        [JsonProperty("id")]
        public int Id { get; set; }
        [JsonProperty("isAppAdmin")]
        public bool IsAppAdmin { get; set; }
        [JsonProperty("lastName")]
        public string LastName { get; set; }
        [JsonProperty("password")]
        public string Password { get; set; }
    }

这就是我构建模拟响应的方式:

private Actor GetRandomActor()
        {
            return Builder<Actor>.CreateNew()
                .With(a => a.FirstName = GetRandomFirstName())
                .With(a => a.LastName = GetRandomLastName())
                .With(a => a.ProfilePicture = GetRandomPictureFile())
                .With(a => a.Email = GetRandomEmail())
                .With(a => a.Username = GetRandomUserName())
                .Build();
        }

【问题讨论】:

    标签: ios xamarin xamarin.ios nbuilder


    【解决方案1】:

    尝试将Preserve 属性添加到您的构造函数中,这样它就不会被链接器删除:

    [Preserve]
    public Actor() {}
    

    (或者在班级级别添加[Preserve (AllMembers = true)]

    【讨论】:

    • 感谢这对我有用,但我也摆脱了指定构造函数的错误。例如.WithContstructor(() =&gt; new Actor())... 虽然您的回复为我节省了更多代码行,但这就是我将其标记为正确的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多