C# 用RESTC反序列化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", "

我正在尝试在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:...
如前所述,我创建了两个类,一个用于对象(事件),另一个用于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; }
}