Как сериализовать свойство JSON массива типов в соответствующий тип массива .NET вместо JArray - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующий JSON для POST к моей конечной точке 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 ...
}

Всякий раз, когда value в JSON являетсямассив десериализованного параметра Value представляет собой JArray, а не массив string, int и т. д. Однако, если value является просто string или number, тогда Value вДесериализованные параметры также string или number.

Что дает?Почему массив в JSON не десериализован в массив правильного типа?

1 Ответ

0 голосов
/ 13 декабря 2018

Это было мое решение.Он «исправляет» JArray путем проверки типа Value после десериализации и преобразования его в соответствующий string[].

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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...