Deserialize JSON with dynamic objects

后端 未结 4 944
梦毁少年i
梦毁少年i 2020-12-11 02:41

I have a JSON object that comes with a long list of area codes. Unfortunately each area code is the object name on a list in the Data object. How do I create a class that wi

相关标签:
4条回答
  • 2020-12-11 02:43

    Since this JSON is not C# friendly, I had to do a little bit of hackery to make it come out properly. However, the result is quite nice.

    var json = JsonConvert.DeserializeObject<dynamic>(sampleJson);
    var data = ((JObject)json.data).Children();
    var stuff = data.Select(x => new { AreaCode = x.Path.Split('.')[1], City = x.First()["city"], State = x.Last()["state"] });
    

    This code will generate an anonymous type that best represents the data. However, the anonymous type could be easily replaced by a ctor for a more normal DTO class.

    The output looks something like this:

    Deserialization Output

    0 讨论(0)
  • 2020-12-11 02:43

    I don't know anything about RestSharp, but if you're using Newtonsoft on the server side, then you can just pass a JObject to your method. Then you can interrogate the object to see what type of object it really is and use JObject.ToObject() to convert it.

    0 讨论(0)
  • 2020-12-11 02:53

    your json is incorrect, but if you do correct it you can use a json-to-csharp tool like the one on http://json2csharp.com/ to generate your classes:

    public class __invalid_type__201
    {
        public string city { get; set; }
        public string state { get; set; }
    }
    
    public class Data
    {
        public __invalid_type__201 __invalid_name__201 { get; set; }
    }
    
    public class RootObject
    {
        public bool success { get; set; }
        public string message { get; set; }
        public Data data { get; set; }
    }
    
    0 讨论(0)
  • 2020-12-11 03:01

    I think using Dictionary<int,areaCode> is the easiest way.

    public class phaxioResponse
        {
            public string success { get; set; }
            public string message { get; set; }
            public Dictionary<int,areaCode> data { get; set; }
    
            public class areaCode
            {
                public string city { get; set; }
                public string state { get; set; }
            }
        }
    

    Then:

        var res= JsonConvert.DeserializeObject<phaxioResponse>(json);
        Console.WriteLine(string.Join(",", res.data));
    
    0 讨论(0)
提交回复
热议问题