How do deserialize this JSON into an object?

前端 未结 5 677
醉酒成梦
醉酒成梦 2021-01-14 02:36

I\'m trying to use JSON.Net to deserialize a JSON object into a C# object.

The object I want to create is MonthlyPerformance which contains a list of

相关标签:
5条回答
  • 2021-01-14 03:11

    the above code that you have for your classes looks correct on first glance.

    i've been successful with deserializing JSON with the following class(JavaScriptSerializer). used as follows

    using System.Web.Script.Serialization;
    
    JavaScriptSerializer js = new JavaScriptSerializer();
    string file = File.ReadAllText(filePath);
    MonthyPerformance json = js.Deserialize<MonthlyPerformance>(file);
    

    oh, and add [Serializable] to your class attributes for each class

    [Serializable]
    class whatever{}
    
    0 讨论(0)
  • 2021-01-14 03:11

    Would you think to use dynamic object instead of deserializing to an object? (without declaring MonthlyPerformance, Type, Category, Fund)

    Facebook C# SDK get user language/region

    Google Maps v3 geocoding server-side

    Usage:

    dynamic jobj = JsonUtils.JsonObject.GetDynamicJsonObject(JsonString);
    foreach (var item in jobj.MonthlyPerformance.Type)
    {
        Console.WriteLine(item.name);
        foreach (var category in item.Category)
        {
            Console.WriteLine("\t" + category.name);
            if (category.ConfigurationFund != null)
            {
                foreach (var fund in category.ConfigurationFund)
                {
                    Console.WriteLine("\t\t" + fund.name);
                }
            }
        }
    }
    

    Helper class needed is here

    0 讨论(0)
  • 2021-01-14 03:16

    Your property names do not match that of your JSON. I would expect the serialization to fail.

    Given the JSON you posted I would expect your c# classes to look like this. I'm not familiar with JSON.net but I would assume they have a property decorator that would allow you to specify the name of the JSON property the c# prop matches too.

    public class MonthlyPerformance
    {
        public List<Type> Type { get; set; }
    }
    
    public class Type
    {
        public int id { get; set; }
        public string countryId { get; set; }
        public string Name { get; set; }
    
        public List<Category> Category { get; set; }
    
        public Type()
        {
    
        }
    }
    
    public class Category
    {
        public int id { get; set; }
        public string countryId { get; set; }
        public string name { get; set; }
    
        public List<Fund> ConfigurationFund{ get; set; }
    
        public Category()
        {
    
        }
    }
    
    public class Fund
    {
        public int id { get; set; }
        public string countryId { get; set; }
        public string name { get; set; }
    
        public Fund()
        {
    
        }
    }
    
    0 讨论(0)
  • 2021-01-14 03:26

    I believe the problem is in your Json string.

    "Type": [ ... ] 
    

    Should be

    "Types": [ ... ]  
    

    Types is the name of property that should be deserialized, you mistakenly put Type the class name instead.

    The same goes for Categories property in the Type class.

    Also I simply removed "MonthlyPerformance" root from the Json string and it worked like a charm. With Json.NET of course.

    Here is a snippets of the modified Json with appropriate property names (notice, Types, Categories, Funds and the absence of MonthlyPerformance root)

    {
        "Types": [ 
        { 
        "id": "65", 
        "countryId": "IE", 
        "name": "Irish Domestic Funds (Gross)", 
        "Categories": [ 
            { 
            "id": "25003334", 
            "countryId": "IE", 
            "name": "UK Equity", 
            "Funds": [ 
                { 
                "id": "25000301", 
                "countryId": "IE", 
                "name": "Aviva Irl UK Equity Fund" 
                }, 
                { 
                "id": "25000349", 
                "countryId": "IE", 
                "name": "New Ireland UK Equity 9" 
            } 
        ] 
    }
    
    0 讨论(0)
  • 2021-01-14 03:34

    This is what I use for JSON deserialization...

    using System.Web.Script.Serialization;
    
    namespace blahblah
    {
        public partial class AccessTierService : ServiceBase
        {
            public static T ia_deserialize_json<T>(string json_string)
            {
                try
                {
                    if ((String.Compare(json_string, null) == 0) ||
                        (String.Compare(json_string, "") == 0) ||
                        (String.Compare(json_string, String.Empty) == 0))
                    {
                        return default(T);
                    }
                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    return (T)serializer.Deserialize<T>(json_string);
                }
                catch (Exception)
                {
                    return default(T);
                }
            }
        }
    }
    

    and to call it...

    login_request = ia_deserialize_json<ol_login_request>(body_string);
    
    0 讨论(0)
提交回复
热议问题