这是我的要求:
作为一个Page
个对象,它有一个字符串属性Name
和一个包含Field
个对象的通用列表.
Field
对象具有以下公共字符串字段Name
和公共通用字段Value
.
Calue
可以是类型string, int
(..以及功能中的更多类型).
当它是一个整数值时,它应该有一个类型为int的最小值和最大值.
当它是字符串值时,它应该有一个int类型的MaxLength值.
我想用Json将这个Page对象序列化,并将其反序列化为Page对象.
这就是我try 过的:
public abstract class Field
{
public string Name { get; set; }
public abstract FieldType Type { get; }
}
public enum FieldType
{
Text,
Number,
}
public class StringField : Field
{
public override FieldType Type => FieldType.Text;
public string Value { get; set; }
public int? MaxLength { get; set; }
}
public class NumberField : Field
{
public override FieldType Type => FieldType.Number;
public int Value { get; set; }
public int? Min { get; set; }
public int? Max { get; set; }
}
public class Page
{
public string Name { get; set; }
public IEnumerable<Field> Fields { get; set; }
}
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly ILogger<DemoController> _logger;
public DemoController(ILogger<DemoController> logger)
{
_logger = logger;
}
[HttpGet]
public IActionResult Get()
{
var page = new Page
{
Name = "TestPage",
Fields = new List<Field>
{
new StringField
{
Name = "Textfield",
MaxLength = 10,
Value = "DefaultValue"
},
new NumberField
{
Name = "NumberField",
Value = 5,
Min = 0,
Max = 10,
}
}
};
return Ok(page);
}
[HttpPost]
public ActionResult Post([FromBody] Page value)
{
return Ok(value);
}
但是Value
没有被正确地序列化和反序列化.
我可以自由 Select 任何Nuget套餐和更换型号.
这是GET方法的输出:
{
"name": "TestPage",
"fields": [
{
"name": "Textfield",
"type": 0
},
{
"name": "NumberField",
"type": 1
}
]
}