C # Newtonsoft JSON в объект

#c# #serialization #json.net

#c# #сериализация #json.net

Вопрос:

Я пытаюсь сопоставить JObject с моделью, но у меня возникли проблемы с сопоставлением ограничений с моделью, как я мог этого добиться? Поскольку значение ограничений немного динамично (https://apiclient.home-connect.com/#/programs/get_available_program )

Код:

    var data = JObject.Parse(jsonstr)["data"].ToObject<ProgramDetails>();
 

JSON:

 {
"data": {
    "key": "ConsumerProducts.CoffeeMaker.Program.Beverage.Coffee",
    "options": [
        {
            "key": "ConsumerProducts.CoffeeMaker.Option.CoffeeTemperature",
            "type": "ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature",
            "unit": "enum",
            "constraints": {
                "allowedvalues": [
                    "ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature.88C",
                    "ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature.90C",
                    "ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature.92C",
                    "ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature.94C",
                    "ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature.95C",
                    "ConsumerProducts.CoffeeMaker.EnumType.CoffeeTemperature.96C"
                ]
            }
        },
        {
            "key": "ConsumerProducts.CoffeeMaker.Option.BeanAmount",
            "type": "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount",
            "unit": "enum",
            "constraints": {
                "allowedvalues": [
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.VeryMild",
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.Mild",
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.Normal",
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.Strong",
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.VeryStrong",
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.DoubleShot",
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.DoubleShotPlus",
                    "ConsumerProducts.CoffeeMaker.EnumType.BeanAmount.DoubleShotPlusPlus"
                ]
            }
        },
        {
            "key": "ConsumerProducts.CoffeeMaker.Option.FillQuantity",
            "type": "Int",
            "unit": "ml",
            "constraints": {
                "min": 60,
                "max": 250,
                "stepsize": 10
            }
        }
    ]
}
}
 

Модель:

     public class ProgramDetails
    {
        public string Key { get; set; }
        public List<OptionDetails> Options { get; set; }
    }

    public class OptionDetails
    {
        public string Key { get; set; }
        public string Type { get; set; }
        public string Unit { get; set; }
       // public string[] constraints { get; set; }
    }
 

Ответ №1:

В вашем случае ограничения не являются строкой [], но должны быть объявлены как модель, подобная этой :

 public class Constraints  
{
    public List<string> Allowedvalues { get; set; } 
    public int? Min { get; set; } 
    public int? Max { get; set; } 
    public int? Stepsize { get; set; } 
}