Json反序列化在xamarin.forms上获取错误

时间:2019-03-22 09:12:47

标签: json xamarin.forms deserialization

我正在尝试反序列化尝试登录时将获取的json。但是出现错误 {Newtonsoft.Json.JsonReaderException:在完成读取JSON内容后遇到的其他文本:。路径”,第5行,位置3。反序列化之后,我的导航取决于该“消息”字符串

我正在获取的JSON(jsonObtained)

 var jsonObtained = Regex.Unescape(stringObtained);
            int startIndex = jsonObtained.IndexOf('[');
            int endIndex = jsonObtained.LastIndexOf(']');
            int length = endIndex - startIndex + 1;
            var resultJSON = jsonObtained.Substring(startIndex, length);

 T resultObject;//Generic type object
            try
            {
                resultObject = JsonConvert.DeserializeObject<T>(resultJSON);//, settings);  
                removeLoadingAnimation();
                return resultObject;
            }

我如何尝试反序列化。

sqlcmd

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您尝试提取子字符串的方式会导致JSON格式错误

该条目看起来是动态的,基于当前显示的代码。

重构对象模型以更好地匹配预期的JSON。

public partial class RootObject<T> {
    [JsonProperty("Message")]
    public Message[] Message { get; set; }

    [JsonProperty("Entry")]
    public T[] Entry { get; set; }
}

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

那种方式只是根据期望的类型反序列化响应

//...

var jsonObtained = Regex.Unescape(stringObtained);

T resultObject;//Generic type object

try
{
    resultObject = JsonConvert.DeserializeObject<RootObject<T>>(jsonObtained);
    removeLoadingAnimation();
    return resultObject;
}

在这种情况下,假设T是与JSON中的Entry键匹配的所需类型

否则,您应该创建一个与预期JSON匹配的模型

public partial class RootObject{
    [JsonProperty("Message")]
    public Message[] Message { get; set; }

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

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

public partial class Entry {
    [JsonProperty("User_Id")]
    public long UserId { get; set; }

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

    [JsonProperty("Client_Id")]
    public long ClientId { get; set; }

    [JsonProperty("Role")]
    public long Role { get; set; }

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

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

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

并使用它

//...

var jsonObtained = Regex.Unescape(stringObtained);

RootObject resultObject;

try
{
    resultObject = JsonConvert.DeserializeObject<RootObject>(jsonObtained);
    removeLoadingAnimation();
    return resultObject;
}