Что JSON не является массивом Foo
JSON. Код JsonConvert.DeserializeObject
будет разбирать строку JSON от корня вверх, а ваш тип T
должен точно соответствовать этой структуре JSON. Синтаксический анализатор не собирается гадать , член JSON должен представлять List
, который вы ищете.
Вам нужен корневой объект, представляющий JSON из корневой элемент.
Вы можете легко позволить классам делать это, создаваемое из образца JSON. Для этого скопируйте свой JSON и нажмите Edit -> Paste Special -> Paste JSON As Classes
в Visual Studio.
В качестве альтернативы вы можете сделать то же самое на http://json2csharp.com , который генерирует больше или меньше тех же классов.
Вы увидите, что коллекция фактически является одним элементом глубже, чем ожидалось:
public class Foo
{
public string bar { get; set; }
}
public class RootObject
{
public List foo { get; set; }
}
Теперь вы можете десериализовать JSON из корня (и быть уверенным переименовать RootObject
в нечто полезное):
var rootObject = JsonConvert.DeserializeObject(jsonString);
И получить доступ к коллекции:
foreach (var foo in rootObject.foo)
{
// foo is a `Foo`
}
Вы всегда можете переименовать свойства, чтобы следовать за своим соглашением об обсадке, и применить JsonProperty
:
public class Foo
{
[JsonProperty("bar")]
public string Bar { get; set; }
}
Также убедитесь, что JSON содержит достаточно данных образца. Парсер класса должен угадать соответствующий тип C # на основе содержимого, содержащегося в JSON.
Я не видел ту функцию в XCode. Но кажется, что кто-то мог записать новый пользовательский сценарий, названный "Конструктор места Defs на Буфере обмена", который находится в Сценариях> Код.
Вы не нашли это полезным.
В XCode в настоящее время нет такого рефакторинга.
, Если Вы хотели бы его, зарегистрируйте запрос улучшения .
MAPRUMORUMORS имела обсуждение этого тоже. Есть ссылка на некоторые яблочные скрипты. Я на самом деле не пробовал это.