В C # как я могу десериализовать этот JSON, когда одно поле может быть строкой или массивом строк?

У меня есть сайт asp.net-mvc, и я читаю строку Json из базы данных. Вот следующий JSON в БД. Это может выглядеть так:

<code>{"description": "Test", "contacts": ["[email protected]", "[email protected]"], "enabled": true}
</code>

или это:

<code>{"description": "Test", "contacts": "[email protected], [email protected]", "enabled": true}
</code>

так что, как вы можете видеть, поле для контактов либо:

a string (with items separated by commas) an array of strings.

Я хочу преобразовать в этот класс:

<code>public class MyJob
{
    public string description;
    public string[] contacts;
    public string enabled;
}
</code>

когда я пытаюсь назначить только строку (изменив вышеприведенное на следующее: public string contacts; ) с помощью JavascriptSerializer ():

<code>var serializer = new JavaScriptSerializer();
string contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts;
</code>

Я получаю эту ошибку в случаях, когда это массив:Type 'System.String' is not supported for deserialization of an array.

Каков наилучший способ десериализации этого для обработки случая:

a string an array of strings.

для поля контакта. Я счастлив поставить любую условную логику, необходимую. ,

Я попробовал это:

<code>  var contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts;
        if (contacts is string)
        {
            jobInfo.contacts = contacts;
        }
        else
        {
            jobInfo.contacts = String.Join("; ", contacts );
        }
</code>

но это, похоже, не исправило, так как я все еще получаю ошибку выше, когда это массив

Ответы на вопрос(3)

Ваш ответ на вопрос