У меня есть приложение xamarin.forms, в котором я пытаюсь использовать API. Я могу получить результаты, но не могу десериализовать данные. Там написано: " Дитя не может быть оценено "
Мои Json данные
{
"success": true,
"user": {
"auth_uuid": "52320",
"current_store": 9,
"permissions": {
"write_notifications": true,
},
"has_accepted_mobile_one_terms": false,
"store": {
"id": 9,
"name": "South Street",
"number": "0009",
}
},
"message": "User Logged In",
"sidebarItems": [
{
"id": 53,
"name": "Notification Center",
}
],
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}
Мой соответствующий класс C#
public clas loginData
{
public class Permissions
{
public bool write_notifications { get; set; }
}
public class Store
{
public int id { get; set; }
public string name { get; set; }
public string number { get; set; }
}
public class User
{
public string auth_uuid { get; set; }
public int current_store { get; set; }
public Permissions permissions { get; set; }
public bool has_accepted_mobile_one_terms { get; set; }
public Store store { get; set; }
}
public class SidebarItem
{
public int id { get; set; }
public string name { get; set; }
}
public class RootObject
{
public bool success { get; set; }
public User user { get; set; }
public string message { get; set; }
public List<SidebarItem> sidebarItems { get; set; }
public string token { get; set; }
}
}
Мой общий класс для выполнения вызовов API
public class APICall
{
Uri baseAddress = new Uri(CommonValues.BaseURL);
string apiurl;
string postdata;
public ErrorMessageData errorMessage;
public APICall(string apiurl, string postdata)
{
this.apiurl = apiurl;
this.postdata = postdata;
this.loadingIndicator = loadingIndicator;
errorMessage = null;
}
public T APICallResult<T>()
{
try
{
var client = new HttpClient { BaseAddress = baseAddress };
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var req = new HttpRequestMessage(HttpMethod.Post, apiurl);
req.Content = new StringContent(postdata, Encoding.UTF8, "application/json");
string stringObtained = "";
Task<string> task = Task.Run(async () => await Threading(client, req));
task.Wait();
stringObtained = task.Result;
var jsonObtained = Regex.Unescape(stringObtained);
var resultJSON = '[' + jsonObtained + ']';
T resultObject;//Generic type object
try
{
resultObject = JsonConvert.DeserializeObject<T>(resultJSON);
return resultObject;
}
catch (Exception)
{
List<ErrorMessageData> errorMessages = JsonConvert.DeserializeObject<List<ErrorMessageData>>(resultJSON);
errorMessage = errorMessages[0];
return default(T);
}
}
catch (Exception e)
{
errorMessage = new ErrorMessageData();
errorMessage.Flag = false;
errorMessage.Message = e.Message;
return default(T);
}
}
async Task<string> Threading(HttpClient client, HttpRequestMessage req)
{
var resp = await client.SendAsync(req);
resp.EnsureSuccessStatusCode();
string stringObtained = await resp.Content.ReadAsStringAsync();
return stringObtained;
}
}
Как я выполняю вызов API
ObservableCollection<loginData> AuthDataObj;
string postdataForAuth = "{\"email\":\"" + "sample@sam.com" + "\",\"password\":\"" + "1234" + "\"}";
NCAPICall callForAuth = new APICall("/auth/login", postdataForAuth, null);
try
{
AuthDataObj = callForAuth.APICallResult<ObservableCollection<loginData>>();
}
catch (Exception ex)
{
await DisplayAlert("Error", ex.Message, "ok");
}
Как решить эту проблему? Связано ли это с отображением данных в моем классе моделей? Любая помощь ценится.