глобально у меня есть следующий объект:
public class Geraet
{
public long Geraetenr { get; set; }
public int Typ { get; set; }
public string Platz { get; set; }
public string Bezeichnung { get; set; }
public int Tr { get; set; }
public string Ip { get; set; }
public string Bespielt { get; set; }
}
Я заполняю список этих объектов, сериализую их и отправляю через веб-сервис:
[HttpGet]
public IHttpActionResult Get_Feedback()
{
List<Geraet> geraeteliste = null;
try
{
geraeteliste = GetSpielgeraeteFromDatabase();
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
}
if (geraeteliste == null)
{
return Ok("No record found!");
}
else
{
var json = Newtonsoft.Json.JsonConvert.SerializeObject(geraeteliste);
return Json(json);
}
}
Данные, полученные веб-сервисом, выглядят следующим образом:
"[{\"Geraetenr\":123456789,\"Typ\":61,\"Platz\":\"1-01\",\"Bezeichnung\":\"CSII ADM430\",\"Tr\":3,\"Ip\":\"123.123.123.123\",\"Bespielt\":\"0\"},{\"Geraetenr\":987654321,\"Typ\":61,\"Platz\":\"2-12\",\"Bezeichnung\":\"M-BOX PUR+ GOLD\",\"Tr\":3,\"Ip\":\"124.124.124.124\",\"Bespielt\":\"0\"}]"
В моем приложении Xamarin у меня есть тот же объект, что и выше, и я пытаюсь десериализовать его:
private List<Geraet> GetSpielgeraeteFromWebservice()
{
List<Geraet> geraeteliste;
var request = HttpWebRequest.Create(Constants.GeraetelistServicePath);
request.ContentType = "application/json";
request.Method = "GET";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
var json = reader.ReadToEnd();
geraeteliste = JsonConvert.DeserializeObject<List<Geraet>>(json);
}
}
return geraeteliste;
}
К сожалению, я получаю сообщение об ошибке выполнения в строке geraeteliste = JsonConvert.DeserializeObject<List<Geraet>>(json);:
Unhandled Exception: Newtonsoft.Json.JsonSerializationException: Error converting value "[{"Geraetenr":123456789,"Typ":61,"Platz":"1-01","Bezeichnung":"CSII ADM430","Tr":3,"Ip":"123.123.123.123","Bespielt":"0"},{"Geraetenr":987654321,"Typ":61,"Platz":"2-12","Bezeichnung":"M-BOX PUR+ GOLD","Tr":3,"Ip":"124.124.124.124","Bespielt":"0"}]" to type 'System.Collections.Generic.List`1[GroceryList.Classes.Geraet]'. Path '', line 1, position 3421.
Отправка / получение материала работает, иначе сообщение об ошибке было бы в строке var json = reader.ReadToEnd();, иначе я бы не получил правильные значения в сообщении об ошибке. Так что-то с десериализацией не получается.
Может ли кто-нибудь помочь и рассказать мне, в чем проблема или может быть проблема? Почему он не может преобразовать? Это правильный порядок и правильные ценности?
С наилучшими пожеланиями
Подскажите, как это проверить? Я попытался присвоить TextView полную строку: FindViewById <TextView> (Resource.Id.textView) .Text = GetSpielgeraeteFromWebservice () {string json; var request = HttpWebRequest.Create (Constants.GeraetelistServicePath); request.ContentType = "application / json"; request.Method = "ПОЛУЧИТЬ"; using (HttpWebResponse response = request.GetResponse () as HttpWebResponse) {using (StreamReader reader = new StreamReader (response.GetResponseStream ())) {json = reader.ReadToEnd ();); }} return json.ToString (); };
Но теперь сообщение об ошибке сообщает мне: Необработанное исключение: System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
Сначала инициализируйте свой список. Поместите var abc = JsonConvert.DeserializeObject <List <Geraet>> (json); И тогда geraetelist = abc;
В методе вы должны присвоить значение по умолчанию любой переменной

это должно работать, вы можете проверить, что возвращается в reader.ReadToEnd ();