使用 RESTSharp C# 反序列化 JSON

Pab*_*rdo 5 c# json xamarin

我正在尝试在 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:...
Run Code Online (Sandbox Code Playgroud)

正如我所读到的,我创建了两个类,一个用于对象(事件),另一个用于 JSON 响应(事件响应),第二个类只有一个事件列表:

public class EventResponse
{
    public ObservableCollection<Event> Events { get; set; }
    public EventResponse(){
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且 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 ();
            }
        }...
Run Code Online (Sandbox Code Playgroud)

在此之后,我希望我的应用程序解析这个 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);
            });
Run Code Online (Sandbox Code Playgroud)

¿有人能给我一些关于如何查看json结果的线索吗?我想我正在遵循适当的步骤,但几个小时后我什么也做不了。谢谢

Sgt*_*ock 6

您错过了反序列化 JSON 字符串的最后一步。您可以使用 Json.net 将字符串反序列化为适当的对象。你可以这样做:

var eventResponse = JsonConvert.DeserializeObject<EventResponse>(jsonString);
Run Code Online (Sandbox Code Playgroud)

这是 Newtonsoft 的 Json.Net http://www.newtonsoft.com/json的链接


SKa*_*all 5

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; }
}
Run Code Online (Sandbox Code Playgroud)

  • 那正是问题所在。我是手工制作模型,我用这个工具再次制作:http://json2csharp.com/,现在我可以毫无问题地解析它。 (4认同)