C# Newtonsoft JSON 反对
C# Newtonsoft JSON to object
我正在尝试将 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; }
}
在你的例子中,constraints 不是一个字符串[],但应该像这样声明为一个模型:
public class Constraints
{
public List<string> Allowedvalues { get; set; }
public int? Min { get; set; }
public int? Max { get; set; }
public int? Stepsize { get; set; }
}
我正在尝试将 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; }
}
在你的例子中,constraints 不是一个字符串[],但应该像这样声明为一个模型:
public class Constraints
{
public List<string> Allowedvalues { get; set; }
public int? Min { get; set; }
public int? Max { get; set; }
public int? Stepsize { get; set; }
}