2016-08-30 2 views
0

мне нужно создать несколько полиморфных типов, используя $type свойство в формате JSON, поэтому я добавил пользовательские настройки к десериализатору:Как обрабатывать создание массива с помощью пользовательских настроек JsonSerializerSettings?

var jsonSerializerSetting = new JsonSerializerSettings 
{ 
    TypeNameHandling = TypeNameHandling.Auto 
}; 

однако теперь с настройками, заданными я не могу десериализацию массивов больше и что-то вроде этого:

var arr = (string[])JsonConvert.DeserializeObject(@"[ 'foo' ]", jsonSerializerSetting); 

заканчивается:

Невозможно привести объект типа 'Newtonsoft.Json.Linq.JArray', чтобы набрать 'System.String []'

Он не работает даже по умолчанию new JsonSerializerSettings(). Думаю, это должно что-то переустанавливать, но я не могу понять, что.

Могу ли я вернуть массив/список и т. Д. Назад и по-прежнему сохранять возможность создания полиморфных типов?

ответ

1

InvalidCastException Вы видите, что не имеет отношения к TypeNameHandling.Auto. Проблема в том, что вы не используете generic version из DeserializeObject(). Вам нужно сделать:

var arr = JsonConvert.DeserializeObject<string []>(@"[ 'foo' ]", jsonSerializerSetting); 

Не-родовое JsonConvert.DeserializeObject(string, JsonSerializerSettings) вы используете действительно возвращают LINQ к JSON JArray, который не имеет неявное или явное приведение к string [].

+0

wow, thx, этот был слишком легким ;-) Я использовал показ до и после того, как я добавил настройки, мне было интересно, почему это не работает. Я не думал, что это может быть общий параметр. – t3chb0t

Смежные вопросы