2015-03-20 2 views
0

У меня есть JSon, который я преобразовываю в объект, используя метод ToObject.NewtonSoft Json.NET и массивы одиночных элементов

Часть этого Json имеет повторяющийся элемент, который правильно представлен как массив в тексте Json. Когда я преобразовать это он правильно отображается в C# объект

public IList<FooData> Foo { get; set; } 

Но когда у меня есть только 1 элемент я получаю ошибку о том, что Json, что я пытаюсь Разбираем в объект не является массивом, так как это делает не имеет [] вокруг него.

Поддерживает ли Json.NET отдельные массивы элементов?

+1

одного элемента массива в формате JSON еще '[]' вокруг элемента. – MarcinJuraszek

+0

Возможный дубликат [Как обрабатывать как отдельный элемент, так и массив для того же свойства, используя JSON.net] (http://stackoverflow.com/questions/18994685/how-to-handle-both-a-single-item -and-an-array-for-the-same-property-using-json-n) –

+0

Если у него нет '[]', это не допустимый массив JSON, поэтому сообщение верное. Что генерирует JSON, пытающийся разобрать? Я бы предположил, что этот код неправильный, а не Json.Net – Liam

ответ

3

Но когда у меня есть только 1 элемент я получаю сообщение об ошибке сказав, что Json , что я пытаюсь Разбираем в объект не является массивом, поскольку он не имеет [] вокруг него.

Если текст JSON не имеет [] вокруг, то это не одного элемента массива: на самом деле это объект (например: { "text": "hello world" }).

Попробуйте использовать JsonConvert.DeserializeObject метод:

jsonText = jsonText.Trim(); 

// If your JSON string starts with [, it's an array... 
if(jsonText.StartsWith("[")) 
{ 
    var array = JsonConvert.DeserializeObject<IEnumerable<string>>(jsonText); 
} 
else // Otherwise, it's an object... 
{ 
    var someObject = JsonConvert.DeserializeObject<YourClass>(jsonText); 
} 

Это может также случиться, что JSON текст содержит буквенное значение, как 1 или "hello world" ... но я считаю, что это очень крайние случаи ...

Для вышеуказанных случаев края просто десериализуют их с помощью JsonConvert.DeserializeObject<string>(jsonText) (замените string на int или что-то еще ...).

1

Убедитесь, что вы заключаете JSON массив один элемент по-прежнему определяется как массив, используя массив нотации []

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