我正在尝试在Xamarin应用程序中反序列化JSON。我已经阅读了很多,但仍然有问题,所以,也许有人可以提供帮助:
我的JSON响应是这样的:
{
"Events":[
{
"id":7,
"name":"show",
"datefrom":"2012-01-01",
"timeto":"12:00:00",
"price":"3",
"imagen":"null",
"desc":"rock band playing",
"info":"Info about tickets",
"user":1,
"place":9,
"dateto":"2013-02-02",
"timeto":"12:30:00",
"Eventcategories":[]
},
{"id":2, name:...
正如我所读到的,我创建了两个类,一个用于Object(事件),另一个用于JSON响应(EventResponse) 第二个只有一个事件列表:
public class EventResponse
{
public ObservableCollection<Event> Events { get; set; }
public EventResponse(){
}
}
}
Event类包含JSON返回的所有字段:
private int _id;
public int id {
get { return _id; }
set {
_id = value;
OnPropertyChanged ();
}
}
private string _nombre;
public string nombre {
get { return _nombre; }
set {
if (value.Equals (_nombre, StringComparison.Ordinal))
return;
_nombre = value;
OnPropertyChanged ();
}
}...
在此之后,我希望我的应用程序解析这个JSON,但我唯一能得到的是一个包含JSON内容的String。
var client = new RestClient("myip/api/events");
var request = new RestRequest (Method.GET);
var asyncHandle = client.ExecuteAsync<EventResponse>(request, response => {
//Here I see the json result
string jsonString=response.Content;
//The same
Console.WriteLine(response.Content);
//Nothing is shown here
Console.WriteLine(response.Data.Events[0].id);
});
¿有人能给我一些关于如何看到json结果的线索吗? 我想我正在遵循适当的步骤,但经过几个小时我无法达成任何目标。 感谢
答案 0 :(得分:4)
JSON序列化程序很可能无法反序列化为对象。看起来你正在尝试将VM和DTO组合成一个IMO并不是一个好主意的类。保持DTO尽可能简单。如果您将EventResponse更改为以下代码,那么您可以获取对象吗?
public class Event
{
public int id { get; set; }
public string name { get; set; }
public string datefrom { get; set; }
public string timeto { get; set; }
public string price { get; set; }
public string imagen { get; set; }
public string desc { get; set; }
public string info { get; set; }
public int user { get; set; }
public int place { get; set; }
public string dateto { get; set; }
public List<object> Eventcategories { get; set; }
}
public class EventResponse
{
public List<Event> Events { get; set; }
}
答案 1 :(得分:2)
您错过了反序列化JSON字符串的最后一步。您可以使用Json.net将字符串反序列化为适当的对象。你可以这样做:
var eventResponse = JsonConvert.DeserializeObject<EventResponse>(jsonString);
以下是Newtonsoft的Json.Net http://www.newtonsoft.com/json
的链接答案 2 :(得分:2)
这是使用Newtonsoft.Json.dll直接反序列化到特定实体/对象的方法,这是一个非常有用的库,可以从nugget安装。您可以在以下链接中找到更多详细信息:https://www.nuget.org/packages/Newtonsoft.Json/
userData = JsonConvert.DeserializeObject<GRALUserData>(response.Content,
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});