反序列化字符串不转换数组

Deserialize string not converting array

我试图将此字符串反序列化为一个对象,但每次转换时,角色 属性 都不会转换回来。

{"LoginAttemptId":235,"UserProfileId":4,"Username":"devclient1","Id":null,"SubscriptionType":null, "Roles":["Client"]}

我已经尝试了这两种反序列化方法:

PauperToPresidentSerializedModel serializeModel = 
               JsonConvert.DeserializeObject<PauperToPresidentSerializedModel>(decUserData);

                //PauperToPresidentSerializedModel serializeModel
                //    = serializer.Deserialize<PauperToPresidentSerializedModel>(decUserData);

并且都给我和对象,其中角色 属性 为空,而不是其中包含 'Client'。

这是 PauperToPresidentSerializedModel 对象定义

public class PauperToPresidentSerializedModel
    {
        public long LoginAttemptId { get; set; }

        public long UserProfileId { get; set; }
        public string Username { get; set; }

        public string Id { get; set; }

        public string SubscriptionType { get; set; }
        public string[] Roles { get; private set; }
        public PauperToPresidentSerializedModel(PauperToPresidentPrincipal principal)
        {
            LoginAttemptId = principal.LoginAttemptId;
            UserProfileId = principal.UserProfileId;
            Username = principal.Username;
            Id = principal.Id;
            SubscriptionType = principal.SubscriptionType;
            Roles = principal.Roles;
        }
        public PauperToPresidentSerializedModel()
        {            
        }
    }

您的 Roles 字段具有 private setter。你可以:

  1. 成功public

  2. 让合同解析器访问私有字段:

    contractResolver.DefaultMembersSearchFlags |= BindingFlags.NonPublic;

  3. 创建自定义合同解析器(我猜你不想走那条路)。

您需要拥有所有属性 public 才能序列化和反序列化:

public string[] Roles { get; set; }