如何将array类型的JSON属性序列化为其正确的.NET Array类型而不是JArray

时间:2018-12-12 22:15:47

标签: asp.net-web-api json.net

我有以下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而不是stringint等的数组。但是,如果value仅仅是stringnumber,则反序列化参数中的Value也是stringnumber

有什么作用?为什么不将JSON中的数组反序列化为正确类型的数组?

1 个答案:

答案 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;
        }
    }
}