微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin 形成 Json 反序列化

如何解决Xamarin 形成 Json 反序列化

我想反序列化来自 Web 服务的 JSON,但由于某种原因,我遇到了异常。我搜索了与此主题相关的每个问题,但没有找到与此异常相关的任何内容。我可能有什么问题?这是一个例外:

Newtonsoft.Json.JsonSerializationException: 'Unexpected token while deserializing object: Endobject. Path '',line 1,position 243.'

这是我的反序列化方法

        public async Task<LoginApiResponse> AuthenticateUserAsync(string username,string password)
    {
        
      //  try
      //  {
            LoginApiRequest loginRequest = new LoginApiRequest()
            {
                Username = username,Password = password
            };

            // serialize object to json
            var content = new StringContent(JsonConvert.SerializeObject(loginRequest),Encoding.UTF8,"application/json");

            var response = await Client.PostAsync(Constants.LOGIN_URI,content);
            response.EnsureSuccessstatusCode();
            // get the data on success and serialize it from json
            using (var stream = await response.Content.ReadAsstreamAsync())
            using (var reader = new StreamReader(stream))
            using (var json = new JsonTextReader(reader))
            {
                System.Diagnostics.Debug.Write(">>>>>>>>>>>>>>>>>>>> " + Serializer.Deserialize<LoginApiResponse>(json));
                return Serializer.Deserialize<LoginApiResponse>(json);
            }
       // }
  /*      catch (Exception ex)
        {
            return null;
        }*/
    }

这是请求模型:

    public class LoginApiRequest
{
    [JsonProperty("Username")]
    public string Username { get; set; }

    [JsonProperty("Password")]
    public string Password { get; set; }
    public LoginApiRequest() { }
}

这是响应模型:

public class LoginApiResponse : MessageStatus
{
    [JsonProperty("Data")]
    public User Data { get; set; }
    public LoginApiResponse() { }
}

这是用户模型:

    public class User
{
    [JsonProperty("Address")]
    public string Address { get; set; }

    [JsonProperty("BloodType")]
    public string BloodType { get; set; }
    [JsonProperty("ConfirmPassword")]
    public string ConfirmPassword { get; set; }

    [JsonProperty("CustomerID")]
    public string CustomerID { get; set; }

    [JsonProperty("dob")]
    public string dob { get; set; }

    [JsonProperty("Email")]
    public string Email { get; set; }

    [JsonProperty("ID")]
    public int? ID { get; set; }

    [JsonProperty("IsActive")]
    public bool IsActive { get; set; }

    [JsonProperty("Name")]
    public string Name { get; set; }

    [JsonProperty("Password")]
    public string Password { get; set; }

    [JsonProperty("Phone")]
    public string Phone { get; set; }

    [JsonProperty("UserRoleID")]
    public int? UserRoleID { get; set; }

    [JsonProperty("Username")]
    public string Username { get; set; }

    public User() { }
}

这里是消息状态:

    public class MessageStatus
{
    [JsonProperty("Message")]
    public string Message { get; set; }

    [JsonProperty("Status")]
    public int Status { get; set; }
    public MessageStatus() { }
}

最后是json:

{
    "Message": null,"Status": 1,"Data": {
        "Address": "Beirut","BloodType": null,"ConfirmPassword": null,"CustomerID": null,"dob": null,"Email": null,"ID": 22,"IsActive": true,"Name": "tg","Password": "123456","Phone": "03708424","UserRoleID": 1,"Username": "tg"
    }
}

解决方法

代替

using (var stream = await response.Content.ReadAsStreamAsync())
        using (var reader = new StreamReader(stream))
        using (var json = new JsonTextReader(reader))
        {
            System.Diagnostics.Debug.Write(">>>>>>>>>>>>>>>>>>>> " + Serializer.Deserialize<LoginApiResponse>(json));
            return Serializer.Deserialize<LoginApiResponse>(json);
        }

试试

var json = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<LoginApiResponse>(json)
return data;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。