我有以下JSON可以发布到Web API端点。
[
{
"name": "REGION",
"value": ["MA", "SE", "SW"]
}
]
Web API端点如下
public class Parameter
{
public string Name { get; set; }
// Value can be string, string[], int, or int[]
public dynamic Value { get; set; }
}
[Route("{chart}/data/")]
[HttpPost]
public IHttpActionResult GetData(string chart, IList<Parameter> parameters)
{
// ... do stuff ...
}
只要JSON中的value
是一个数组,反序列化参数的Value
就是JArray
而不是string
,int
等的数组。但是,如果value
仅仅是string
或number
,则反序列化参数中的Value
也是string
或number
。>
有什么作用?为什么不将JSON中的数组反序列化为正确类型的数组?
答案 0 :(得分:1)
这是我的解决方案。它通过反序列化后检查Value
类型并将其转换为适当的string[]
来“校正” JArray。
public class Parameter
{
public string Name { get; set; }
public dynamic Value { get; set; }
[OnDeserialized]
public void OnDeSerialized(StreamingContext context)
{
Type type = this.Value.GetType();
if (type == typeof(JArray))
{
var value = (this.Value as JArray).ToObject(typeof(string[]));
this.Value = value;
}
}
}