C# 用RESTC反序列化JSON#
我正在尝试在Xamarin应用程序中反序列化JSON。我已经读了很多,但仍然有问题,所以,也许这里有人可以帮助: 我的JSON响应如下:C# 用RESTC反序列化JSON#,c#,json,xamarin,C#,Json,Xamarin,我正在尝试在Xamarin应用程序中反序列化JSON。我已经读了很多,但仍然有问题,所以,也许这里有人可以帮助: 我的JSON响应如下: { "Events":[ { "id":7, "name":"show", "datefrom":"2012-01-01", "timeto":"12:00:00", "
{
"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:...
如前所述,我创建了两个类,一个用于对象(事件),另一个用于JSON响应(EventResponse)
第二个只有一个事件列表:
public class EventResponse
{
public ObservableCollection<Event> Events { get; set; }
public EventResponse(){
}
}
}
在此之后,我希望我的应用程序解析这个JSON,但我唯一能得到的是一个包含JSON内容的字符串
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);
});
var-client=newrestclient(“myip/api/events”);
var请求=新的重新请求(Method.GET);
var asynchHandle=client.ExecuteAsync(请求、响应=>{
//这里我看到了json结果
字符串jsonString=response.Content;
//同样的
Console.WriteLine(response.Content);
//这里没有显示任何内容
Console.WriteLine(response.Data.Events[0].id);
});
有人能给我一些关于如何看到json结果的线索吗?
我想我是在遵循适当的步骤,但几个小时后我什么都做不到。
谢谢你错过了反序列化JSON字符串的最后一步。您可以使用Json.net将字符串反序列化为适当的对象。您可以这样做:
var eventResponse = JsonConvert.DeserializeObject<EventResponse>(jsonString);
var eventResponse=JsonConvert.DeserializeObject(jsonString);
这里有一个到Newtonsoft的Json.Net的链接,这是如何使用Newtonsoft.Json.dll直接反序列化到特定的实体/对象,这是一个非常有用的库,可以从nugget安装。有关更多详细信息,请访问以下链接:
userData=JsonConvert.DeserializeObject(response.Content,
新JsonSerializerSettings
{
PreserveReferencesHandling=PreserveReferencesHandling.Objects
});
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; }
}
公共类事件
{
公共int id{get;set;}
公共字符串名称{get;set;}
公共字符串datefrom{get;set;}
公共字符串timeto{get;set;}
公共字符串price{get;set;}
公共字符串imagen{get;set;}
公共字符串desc{get;set;}
公共字符串信息{get;set;}
公共int用户{get;set;}
公共整数位置{get;set;}
公共字符串dateto{get;set;}
公共列表事件类别{get;set;}
}
公共类事件响应
{
公共列表事件{get;set;}
}
RestSharp包含JSON序列化程序,因此这不是问题的根源。为了让答案保持最新,我要指出,从103版开始,RestSharp不再包含对Newtonsoft的JSON.Net的依赖。RestSharp包含JSON序列化程序,因此这不是问题的根源。为了让答案保持最新,我想指出,从103版开始,RestSharp不再包含对Newtonsoft的JSON.Net的依赖。这正是问题所在。我是手工制作模型的,我用这个工具又做了一次:现在我可以毫无问题地解析它。这些工具也救了我。格式化右边的c#就行了!谢谢
userData = JsonConvert.DeserializeObject<GRALUserData>(response.Content,
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
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; }
}